乐筑天下

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

[编程交流] 如何在块中查找文本

[复制链接]

10

主题

38

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 09:10:55 | 显示全部楼层 |阅读模式
我想在块中获取文本。。
 
最后我会变成这样。。。(setq a’(“2”“ABC”))
 
你可以理解,如果你看到我的附加文件。。。
cadtutor问题。图纸
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:17:11 | 显示全部楼层
你可以从这样的事情开始。。。。
 
  1. (vlax-for block
  2.                  (vla-get-blocks
  3.                    (vla-get-activedocument
  4.                      (vlax-get-acad-object)
  5.                    )
  6.                  )
  7.    (vlax-for obj block
  8.      (if (and (eq "AcDbText" (vla-get-objectname obj))
  9.               (eq (vla-get-TextString obj) "abc")
  10.               )
  11.                ;;;;;;;; ....................
  12.                      ;;;;;;;;;;;;;;;;;; ............................
  13.       ;;;;;;;;;;;;;; ..  SO ON .....
Tharwat
回复

使用道具 举报

10

主题

38

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 09:19:19 | 显示全部楼层
谢谢Tharwat
 
我试着理解….^^
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:25:46 | 显示全部楼层
不客气,阿林。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:27:17 | 显示全部楼层
另一个详细示例演示了一般概念:
 
  1. ([color=BLUE]defun[/color] GetBlockText
  2. ( blockcollection blockname [color=BLUE]/[/color] _GetIteminCollection _GetItemsinCollectionIf blockdef )
  3. ([color=BLUE]defun[/color] _GetIteminCollection ( collection item [color=BLUE]/[/color] result )
  4.    ([color=BLUE]if[/color]
  5.      ([color=BLUE]not[/color]
  6.        ([color=BLUE]vl-catch-all-error-p[/color]
  7.          ([color=BLUE]setq[/color] result
  8.            ([color=BLUE]vl-catch-all-apply[/color] '[color=BLUE]vla-item[/color] ([color=BLUE]list[/color] collection item))
  9.          )
  10.        )
  11.      )
  12.      result
  13.    )
  14. )
  15. ([color=BLUE]defun[/color] _GetItemsinCollectionIf ( collection condition [color=BLUE]/[/color] result )
  16.    (
  17.      ([color=BLUE]lambda[/color] ( condition )   
  18.        ([color=BLUE]vlax-for[/color] item collection
  19.          ([color=BLUE]if[/color] (condition item) ([color=BLUE]setq[/color] result ([color=BLUE]cons[/color] item result)))
  20.        )
  21.        ([color=BLUE]reverse[/color] result)
  22.      )
  23.      ([color=BLUE]eval[/color] condition)
  24.    )
  25. )
  26. ([color=BLUE]if[/color] ([color=BLUE]setq[/color] blockdef (_GetItemInCollection blockcollection blockname))
  27.    ([color=BLUE]mapcar[/color] '[color=BLUE]vla-get-textstring[/color]
  28.      (_GetItemsinCollectionIf blockdef
  29.       '([color=BLUE]lambda[/color] ( x ) ([color=BLUE]wcmatch[/color] ([color=BLUE]vla-get-objectname[/color] x) [color=MAROON]"AcDb*Text"[/color]))
  30.      )
  31.    )
  32. )
  33. )
  34. ([color=blue]vl-load-com[/color])
  35. ([color=BLUE]defun[/color] c:test [color=BLUE]nil[/color]
  36. (GetBlockText
  37.    ([color=BLUE]vla-get-blocks[/color]
  38.      ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color]))
  39.    )
  40.    ([color=BLUE]getstring[/color] [color=MAROON]"\nSpecify Block Name: "[/color])
  41. )
  42. )
回复

使用道具 举报

10

主题

38

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 09:32:32 | 显示全部楼层
谢谢李。
这就是我想要的….^
回复

使用道具 举报

10

主题

38

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 09:33:29 | 显示全部楼层
是否有可能在块中的块中获取文本。。或者在块中的块中获取文本?
 
T T
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:37:36 | 显示全部楼层
是的,使用递归:
 
  1. (defun GetBlockText ( blockcollection blockname / _GetIteminCollection blockdef result )
  2. (defun _GetIteminCollection ( collection item / result )
  3.    (if
  4.      (not
  5.        (vl-catch-all-error-p
  6.          (setq result
  7.            (vl-catch-all-apply 'vla-item (list collection item))
  8.          )
  9.        )
  10.      )
  11.      result
  12.    )
  13. )
  14. (if (setq blockdef (_GetIteminCollection blockcollection blockname))
  15.    (vlax-for item blockdef
  16.      (cond
  17.        ( (eq "AcDbBlockReference" (vla-get-objectname item))
  18.          (setq result (append (GetBlockText blockcollection (vla-get-name item)) result))
  19.        )
  20.        ( (wcmatch (vla-get-objectname item) "AcDb*Text")
  21.          (setq result (cons (vla-get-textstring item) result))
  22.        )
  23.      )
  24.    )
  25. )
  26. (reverse result)
  27. )
  28. (vl-load-com)
  29. (defun c:test nil
  30. (GetBlockText
  31.    (vla-get-blocks
  32.      (vla-get-activedocument (vlax-get-acad-object))
  33.    )
  34.    (getstring "\nSpecify Block Name: ")
  35. )
  36. )
回复

使用道具 举报

10

主题

38

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 09:41:49 | 显示全部楼层
你这个天才。。。。非常感谢…^^这个资料对我的工作很有用。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:47:31 | 显示全部楼层
不客气,阿林!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 04:56 , Processed in 0.564714 second(s), 72 queries .

© 2020-2025 乐筑天下

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