乐筑天下

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

[编程交流] 从S查找最近的文字/多行文字

[复制链接]

4

主题

21

帖子

18

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 19:43:29 | 显示全部楼层 |阅读模式
大家好,
如何从指定点找到最近的指定文字/多行文字对象?
例如:我想找到距离点A最近的TB2A。
非常感谢。
 
马尔迪
 
204336r7vv8q8wu4zzfqpt.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:56:03 | 显示全部楼层
快速书写:
 
  1. (defun NearestTextFromPoint ( pt str / d e i l m r s )
  2.    (if
  3.        (setq s
  4.            (ssget "_X"
  5.                (list
  6.                   '(0 . "TEXT,MTEXT")
  7.                    (cons 1 str)
  8.                    (cons 410 (if (= 1 (getvar 'CVPORT)) (getvar 'CTAB) "Model"))
  9.                )
  10.            )
  11.        )
  12.        (repeat (setq i (sslength s))
  13.            (setq e (ssname s (setq i (1- i)))
  14.                  l (entget e)
  15.            )
  16.            (if
  17.                (<
  18.                    (setq d
  19.                        (distance pt
  20.                            (if
  21.                                (or (eq "MTEXT" (cdr (assoc 0 l)))
  22.                                    (and
  23.                                        (zerop (cdr (assoc 72 l)))
  24.                                        (zerop (cdr (assoc 73 l)))
  25.                                    )
  26.                                )
  27.                                (cdr (assoc 10 l))
  28.                                (cdr (assoc 11 l))
  29.                            )
  30.                        )
  31.                    )
  32.                    (cond (m) ((1+ d)))
  33.                )
  34.                (setq m d r e) r
  35.            )
  36.        )
  37.    )
  38. )
  39. (defun c:test ( / s p )
  40.    (setq s (getstring t "\nString: "))
  41.    (if (setq p (getpoint "\nPoint: "))
  42.        (sssetfirst nil (ssadd (NearestTextFromPoint (trans p 1 0) s)))
  43.    )
  44.    (princ)
  45. )
回复

使用道具 举报

171

主题

447

帖子

276

银币

中流砥柱

Rank: 25

铜币
860
发表于 2022-7-5 20:02:32 | 显示全部楼层
 
我测试了一下,效果很好
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:04:17 | 显示全部楼层
很高兴听到维马尔
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 20:15:48 | 显示全部楼层
 
对《密码大师》的微弱赞扬。
也许应该向你道谢?
回复

使用道具 举报

4

主题

21

帖子

18

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 20:22:20 | 显示全部楼层
谢谢你,李,这对我的快速测试有效。我还在学习你的日常生活。。。。
 
马尔迪
回复

使用道具 举报

10

主题

20

帖子

9

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
52
发表于 2022-7-5 20:28:41 | 显示全部楼层
很抱歉回复了一条旧帖子。我也需要这个,但在选择一个点后,得到了这个错误:“点:;错误:错误的参数类型:lentyp nil”
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:35:26 | 显示全部楼层
 
更改:
  1. (defun c:test ( / s p )
  2.    (setq s (getstring t "\nString: "))
  3.    (if (setq p (getpoint "\nPoint: "))
  4.        (sssetfirst nil (ssadd (NearestTextFromPoint (trans p 1 0) s)))
  5.    )
  6.    (princ)
  7. )

收件人:
  1. (defun c:test ( / e s p )
  2.    (setq s (getstring t "\nString: "))
  3.    (if (setq p (getpoint "\nPoint: "))
  4.        (if (setq e (NearestTextFromPoint (trans p 1 0) s))
  5.            (sssetfirst nil (ssadd e))
  6.            (princ (strcat "\nNo text/mtext with content "" s "" found in the current layout."))
  7.        )
  8.    )
  9.    (princ)
  10. )
回复

使用道具 举报

10

主题

20

帖子

9

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
52
发表于 2022-7-5 20:42:53 | 显示全部楼层
谢谢李,效果很好!嗯,你能修改一下吗,这样它就能找到最近的文本了?编辑:没关系,它可以使用通配符。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:46:39 | 显示全部楼层
不客气。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 01:16 , Processed in 0.655215 second(s), 75 queries .

© 2020-2025 乐筑天下

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