乐筑天下

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

[编程交流] 从中获取文本字符串的值

[复制链接]

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 09:27:47 | 显示全部楼层 |阅读模式
我有一系列称为1bar、2bar、4bar、8bar、12bar、16bar等的比例尺块
 
每个块中都有一段类似的文本
i、 例如,12“=1’-0”、6“=1’-0”、3“=1’-0”、1 1/2“=1’-0”等
 
我需要一段代码来获取该文本字符串的值,以便我可以在lisp例程的其他地方使用它
 
懒洋洋地走出来寻求帮助
 
TAM公司
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:33:14 | 显示全部楼层
文本是嵌套的文本/多行文字对象,还是属性?
 
如果您可以发布示例块,这也会有所帮助。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 09:38:37 | 显示全部楼层
我应该说我想“设置”整个文本
 
它只是一段文字(不是多行文字或属性)
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:42:10 | 显示全部楼层
这可以使用AutoLISP或Visual LISP来完成(不确定您更精通哪一种?)
 
您必须单步遍历块的嵌套对象,当您找到要查找的对象的匹配项时,提取TextString属性。
 
例子:
 
  1. ;; <-- Step through
  2. (if (= "AcDbText" (vla-get-objectname [i][color=blue]<Object>[/color][/i]))
  3.    (setq TextString (vla-get-textstring [i][color=#0000ff]<Object>[/color][/i])))

24巴。图纸
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:45:10 | 显示全部楼层
 
您不能使用ssget选择子实体,您需要按照前面所述逐步完成块定义。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 09:49:25 | 显示全部楼层
听起来好像有人需要制作一个属性块。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 09:50:59 | 显示全部楼层
详细示例:
  1. (progn
  2. ;;SET VARIABLES
  3. (setvar "cmdecho" 0)
  4. (setvar "attdia" 0)
  5. (setvar "attreq" 0)
  6. (setvar "filedia" 0)
  7. (command "ucsicon" "off")
  8. (command "style" "standard" "simplex" "" "" "22.5" "" "" "")
  9. ;
  10. ;
  11. ;
  12. ;
  13. ;
  14. ;DEFINED FUNCTION - CHOOSES STUFF FROM HYDRO PULLDOWN MENU PICKS AND SETS VARIABLES
  15. (defun tbupdate ()
  16.    (setq b1 (ssname sset1 0))
  17.      (setq e1 (entnext b1) e2 (entnext e1) e3 (entnext e2)
  18.            e4 (entnext e3) e5 (entnext e4) e6 (entnext e5)
  19.            e7 (entnext e6) e8 (entnext e7) e9 (entnext e8)
  20.            e10 (entnext e9) e11 (entnext e10) e12 (entnext e11)
  21.            e13 (entnext e12) e14 (entnext e13) e15 (entnext e14)
  22.            e16 (entnext e15) e17 (entnext e16) e18 (entnext e17)
  23.            e19 (entnext e18) ep1 (entnext e19) ep2 (entnext ep1)
  24.       )
  25. ;
  26. ;
  27.    (setq fg (strlen (getvar "dwgname")))
  28.    (setq fg2 (- fg 4))
  29.    (setq ofile (substr (getvar "dwgname") 1 fg2))
  30. ;
  31. ;
  32.    (setq nfile (entget e1))
  33.       (setq nfile (subst (cons 1 ofile)(assoc 1 nfile)nfile))
  34.       (entmod nfile)
  35.    (setq nnam (entget e2))
  36.       (setq nnam (subst (cons 1 nam)(assoc 1 nnam)nnam))
  37.       (entmod nnam)
  38.    (setq nmcode (entget ep2))
  39.       (setq nmcode (subst (cons 1 mcode)(assoc 1 nmcode)nmcode))
  40.       (entmod nmcode)
  41.    (setq ndamloc (entget e7))
  42.       (setq ndamloc (subst (cons 1 damloc)(assoc 1 ndamloc)ndamloc))
  43.       (entmod ndamloc)
  44.       (command "regen")
  45. );defun
  46. ;
  47. ;
  48. ;;START VISUAL LISP
  49. (vl-load-com)
  50. (vla-startundomark (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))
  51. ;
  52. ;
  53. ;;SET AUTOLISP SYMBOL ASSIGNMENTS
  54. (setq asize "A")
  55. (setq bsize "B")
  56. (setq csize "C")
  57. (setq dsize "D")
  58. (setq esize "E")
  59. (setq style "HYDRO-DEC-DIM")
  60. (setq p1 "0,0")
  61. ;
  62. ;
  63. ;;FREEZE UNNEEDED LAYERS
  64. (command "layer" "s" "scale" "f" "*" "")
  65. ;
  66. ;
  67. ;;FIND SOLIDWORKS SCALE-OBJECT
  68. (setq ss1 (ssget "_X" '((8 . "SCALE")(0 . "MTEXT")(1 . "SCALE:*"))))
  69. ;
  70. ;
  71. ;;CHANGE SCALE-OBJECT TO REPLACE UNNEEDED DATA WITH NOTHING AND GET REMAINING DATA
  72. (setq patt "SCALE: 1:")
  73. (setq newpatt "")
  74. (setq count -1)
  75. (while (< (setq count (1+ count))(sslength ss1))
  76.    (setq ent1 (entget (ssname ss1 count))
  77.          obj1 (vlax-ename->vla-object (cdr (car ent1)))
  78.          str1 (vla-get-textstring obj1))
  79.    (while (setq match? (vl-string-search patt str1))
  80.    (setq str1 (vl-string-subst newpatt patt str1))
  81.    (vla-put-textstring obj1 str1)
  82.    );while
  83. );while
  84. ;
  85. ;
  86. ;;GET VALUE OF SCALE-OBJECT DATA
  87. (setq scale str1)
  88. ;
  89. ;
  90. ;;DELETE SCALE-OBJECT
  91. (vla-delete obj1)
  92. ;
  93. ;
  94. ;;FIND SOLIDWORKS TITLEBLOCK SIZE-OBJECT
  95. (setq ss2 (ssget "_X" '((8 . "SCALE")(0 . "MTEXT"))))
  96. (setq count2 -1)
  97. (setq count2 (1+ count2))
  98. (sslength ss2)
  99. (setq ent2 (entget (ssname ss2 count2)))
  100. (setq obj2 (vlax-ename->vla-object (cdr (car ent2))))
  101. ;
  102. ;
  103. ;;GET VALUE OF TB SIZE-OBJECT
  104. (setq str2 (vla-get-textstring obj2))
  105. ;
  106. ;
  107. ;;DELETE TB SIZE-OBJECT
  108. (vla-delete obj2)
  109. ;
  110. ;
  111. ;;MATCH VALUE OF TB SIZE-OBJECT TO CHOOSE AUTOCAD TITLEBLOCK SIZE AND SET POINT FOR SCALE-BAR INSERT
  112. (if (eq asize str2)
  113. (setq tb "HEDTBA" p5 (* (read str1) 3) p6 (* (read str1) 3.25)))
  114. (if (eq bsize str2)
  115. (setq tb "HEDTBB" p5 (* (read str1) 4.75) p6 (* (read str1) 0.5)))
  116. (if (eq csize str2)
  117. (setq tb "HEDTBC" p5 (* (read str1) 10.75) p6 (* (read str1) 0.5)))
  118. (if (eq dsize str2)
  119. (setq tb "HEDTBD" p5 (* (read str1) 21.75) p6 (* (read str1) 0.5) x1 (* (read str1) 25.5)))
  120. (if (eq esize str2)
  121. (setq tb "HEDTBE" p5 (* (read str1) 27.25) p6 (* (read str1) 0.5)))
  122. ;
  123. ;
  124. ;
  125. ;
  126. ;
  127. ;
  128. ;;INSERT, DELETE AND PURGE AUTOCAD TEMPLATE BLOCK TO GET DIMENSION STYLE
  129. (command "insert" "template" "0,0" "" "" "")
  130. (command "erase" "l" "")
  131. (command "purge" "b" "template" "n")
  132. ;
  133. ;
  134. ;;THAW ALL LAYERS, SET LAYER 0 TO CURRENT AND ADD LAYER BASE
  135. (command "layer" "t" "*" "s" "0" "n" "BASE" "")
  136. ;
  137. ;
  138. ;;CHANGE ALL SOLIDWORKS ENTITIES TO BASE LAYER
  139. (command "change" "all" "" "p" "la" "BASE" "")
  140. ;
  141. ;
  142. ;;PURGE ALL UNUSED LAYERS
  143. (command "purge" "la" "" "n")
  144. ;
  145. ;
  146. ;;SET "HYDRO-DIM-DEC" AS CURRENT DIMSTYLE, CHANGE DIMSCALE TO RETRIEVED SCALE VALUE & SAVE THE CHANGE TO "HYDRO-DIM-DEC"
  147. (setq activedoc(vlax-get-property(vlax-get-acad-object)'activedocument))
  148. (vlax-put-property activedoc 'ActiveDimStyle (vla-item(vla-get-dimstyles activedoc)style))
  149. (setvar "dimscale" (read scale))
  150. (command "dimstyle" "s" "HYDRO-DEC-DIM" "y")
  151. ;
  152. ;
  153. ;;SCALE SOLIDWORKS ENTITIES PER RETRIEVED SCALE VALUE
  154. (command "scale" "all" "" "0,0" scale)
  155. ;
  156. ;
  157. ;;CHANGE ALL SOLIDWORKS DIMESIONS TO HYDRO DIMSTYLE
  158. (command "dimstyle" "a" "all" "")
  159. (command "zoom" "a" "zoom" "e" "zoom" "a")
  160. ;
  161. ;
  162. ;;MOVE SOLIDWORKS ENTITIES TO BASE POINT
  163. (setq p2 (getvar "extmin"))
  164. (setq p3 (list (* 0.5 (read scale))(* 0.5 (read scale))))
  165. (command "move" "all" "" p2 p3)
  166. ;
  167. ;
  168. ;;PURGE UNUSED DIMENSION STYLES
  169. (command "purge" "d" "" "n")
  170. ;
  171. ;
  172. ;;PURGE UNUSED TEXT STYLES
  173. (command "purge" "st" "" "n")
  174. ;
  175. ;
  176. ;;SET OTHER AUTOCAD VARIABLES PER RETRIEVED SCALE VALUE
  177. (setvar "ltscale" (read scale))
  178. (setvar "dimscale" (read scale))
  179. (setvar "textsize" (* 0.125 (read scale)))
  180. ;
  181. ;
  182. ;;INSERT SCALEBAR PER RETRIEVED SCALE VALUE
  183. (SETQ bar (strcat str1 "BAR"))
  184. (command "insert" bar (list p5 p6) 1 1 0)
  185. ;
  186. ;
  187. ;;PURGE
  188. (command "purge" "a" "" "n")
  189. ;
  190. ;
  191. ;;INSERT THE MADE IN SOLIDWORKS BLOCK
  192. (setq Y1 0)
  193. (command "insert" "madeinsw" (list x1 y1) scale scale 0)
  194. ;
  195. ;
  196. ;;INSERT TITLEBLOCK PER RETRIEVED SCALE VALUE
  197. (command "insert" tb "0,0" (read scale) "" "")
  198. ;
  199. ;
  200. ;;GETS HYDRO TITLEBLOCK AND PREPARES FOR THE DEFINED FUNCTION TO RUN
  201. (setq sset1 (ssget "x" (list (cons 2 "hedtb*"))))
  202. ;
  203. ;
  204. ;;SET DWG LIMITS
  205. (command "zoom" "a")
  206. (setq p4 (getvar "extmax"))
  207. (command "limits" p1 p4)
  208. (command "zoom" "a")
  209. ;
  210. ;
  211. ;;RUNS THE DEFINED FUNCTION
  212. (tbupdate)
  213. ;
  214. ;
  215. ;SET BASE LAYER TO CURRENT
  216. (command "layer" "s" "base" "")
  217. ;
  218. ;
  219. );progn
  220. (setvar "cmdecho" 1)
  221. (setvar "attdia" 1)
  222. (setvar "attreq" 1)
  223. (setvar "filedia" 1)
  224. (setvar "lunits" 2)
  225. (command "ddatte" "l")
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:56:15 | 显示全部楼层
 
... 我偷偷地怀疑我的英雄会出现。
 
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:58:19 | 显示全部楼层
这太可悲了-
我有35000张两座水电站的图纸
其中可能有1/5的内存在这些预定义的块中
如果我换块
我必须更新所有这些图纸(使用适当的比例尺)
 
对于本练习(将solidworks图形更新为AutoCAD标准)
我宁愿炸掉积木
抹掉所有碎片
然后重新插入
 

在那里插入一些设置每个比例可能性的代码
为了得到我想要的文本
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:02:15 | 显示全部楼层
8618。。。。。。。。。。。。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 02:59 , Processed in 1.435356 second(s), 72 queries .

© 2020-2025 乐筑天下

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