cchessbd 发表于 2023-3-14 11:41:44

求一段代码,获取某点周围的图元名!

本帖最后由 cchessbd 于 2023-3-14 12:13 编辑




如上图的cad文件中,怎么获取点我已经弄明白了,但是还有2个问题对我有所困惑。
1、求一段代码,获取某点(K26-K27多段线起点)周围的"K26“文字图元名。只获取最近的一个。
2、求一段代码,获取某点(红色块心)周围的"CQZK*"文字图元名。只获取最近的一个。

当然,如果您能提供2段代码更好。提供任意一段都算解决问题。其他的我来学习,、、
我想再弄成一个通用的函数,就是可以获取某点周围的文字,块,线之类,当然,这是以后的问题了。

ssyfeng 发表于 2023-3-14 11:41:45

获取某点(红色块心)周围的"CQZK*"最近文字




cchessbd 发表于 2023-3-14 13:26:28

ssyfeng 发表于 2023-3-14 13:14
获取某点(红色块心)周围的"CQZK*"最近文字

试了下,对块可以用。谢谢您!再等1-2天看有没有更方便的。如果没有其他答案的话,您就是最佳。

cchessbd 发表于 2023-3-14 13:38:33

ssyfeng 发表于 2023-3-14 11:41
获取某点(红色块心)周围的"CQZK*"最近文字

稍微改了下,都可正常获取对象。
剩下的我自己来研究了。

cchessbd 发表于 2023-3-15 07:39:28

ssyfeng 发表于 2023-3-14 11:41
获取某点(红色块心)周围的"CQZK*"最近文字

您好,经过多次试用,一些情况会得不到我想要的结果。
我思考了下,估计是要以文字几何中心坐标才能得到正确结果?
可否再改进一下您的代码呢?

ssyfeng 发表于 2023-3-15 16:08:26

你可以把文字包围盒函数换成图元的包围盒函数

cchessbd 发表于 2023-3-15 16:20:23

本帖最后由 cchessbd 于 2023-3-15 16:21 编辑

ssyfeng 发表于 2023-3-15 16:08
你可以把文字包围盒函数换成图元的包围盒函数
我拜读您的代码,现在是取得文字的中心点作为计算吗?
您这个代码在孔文字比较稀疏时候没有问题。但是对密布的没办法。

但是我估计要选文字的4个角点来计算比较科学。因为文字可左可又,一般是到圆心或块心有一个最近的角点。
取这个最近的点作为文字与块心圆心的距离。来做比较。

我还想在您的代码基础上加一个半径范围限制,比方说200圆范围以内。这样最多也就几十个点,计算步骤就没有这么多。

但是我现在还是读得不太懂。因为代码比较长。

cchessbd 发表于 2023-3-15 16:25:46

本帖最后由 cchessbd 于 2023-3-15 16:27 编辑

我在论坛找了一段获取文字中心点的代码。但是还没搞明白怎么获取4个角点。
这个可读性强一点。您看能否帮忙修改一下。得到文字的四个角点。

(vl-load-com)

(defun MIDPOINT (PT1 PT2)
(mapcar '(lambda (X Y) (* 0.5 (+ X Y))) PT1 PT2 )
)

(defun AX:GETBOUNDINGBOX (ENT / LL UR)
(vla-getboundingbox (vlax-ename->vla-object ENT) 'LL 'UR)
(MIDPOINT (vlax-safearray->list LL) (vlax-safearray->list UR))
)

(defun c:TT1 ( / CENTPT N)
(SETQ OBJ (ENTSEL "\nSelect Text : "))
(SETQ ENT (ENTGET (CAR OBJ)))
(setq CENTPT (AX:GETBOUNDINGBOX (cdr (ASSOC -1 ENT))))
(command "_.DIST" centpt)
(princ)
)

masterlong 发表于 2023-3-15 16:35:16

http://bbs.mjtd.com/thread-183274-1-1.html

cchessbd 发表于 2023-3-15 17:07:16

我明白了,这里已经得到了2个角点了。等我再想法改一下
(vlax-safearray->list LL) (vlax-safearray->list UR)
页: [1] 2
查看完整版本: 求一段代码,获取某点周围的图元名!