选择起始点附近的文本
你好我需要提取多段线的长度以及它们的起点和终点附近的一些文本,并将其全部转储到excel中,如下所示:
从到长度
A B 11.23
但首先我需要弄清楚如何选择多段线起点和终点附近的对象。
任何帮助都将不胜感激。 如果你能按层次、风格和/或高度过滤文本,这会有很大帮助。
试试这个
(defun C:TEST (/ sp st i e p1 p2 lp pt)
(if
(and
(setq sp (ssget '((0 . "*POLYLINE"))))
(setq st (ssget "X" '((0 . "TEXT")))); add here more filters (8 . "Text Layer") (7 . "Text Style")
)
(progn
(repeat (setq i (sslength sp))
(setq i(1- i)
e(ssname sp i)
p1 (vlax-curve-getstartpoint e)
p2 (vlax-curve-getendpoint e)
lp (cons (list
(vlax-curve-getdistatparam e (vlax-curve-getendparam e))
(list nil (distance p1 '(0.0 0.0 0.0)) p1)
(list nil (distance p2 '(0.0 0.0 0.0)) p2)
)
lp
)
)
)
(repeat (setq i (sslength st))
(setq i(1- i)
e(entget (ssname st i))
pt (cdr (assoc 10 e))
lp (mapcar
(function
(lambda (pl)
(cons (car pl)
(mapcar
(function
(lambda (x / d)
(if (< (setq d (distance pt (caddr x))) (cadr x))
(list (cdr (assoc 1 e)) d (caddr x))
x
)
)
)
(cdr pl)
)
)
)
)
lp
)
)
)
(setq lp
(mapcar
(function
(lambda (x)
(list (caadr x) (caaddr x) (car x))
)
)
lp
)
)
(mapcar 'print lp)
(textscr)
)
)
(princ)
) 您好,Stefan BMR,感谢您提供这段精彩的代码,
很抱歉回复得太晚,我正忙于理解你在那里的魔术,并从中学习。
我有点理解其中的大部分,虽然主要的技巧仍在我脑海中浮现,但我的意思是:
据我所知,它将多段线的起始点(和最终端点)之间的距离和(0.0.0.0)与文本和多段线的起始点之间的距离进行比较,如果第二个距离小于第一个距离,它将与该文本、该文本和起始点之间的距离以及该点的坐标进行列表,长度稍后添加了cons,但它是如何工作的?更多文本更接近起始点(0.0.0.0),它如何总是选择正确的文本。
尽管如此,它的工作还是完美无缺的,我添加了几行代码输出到一个名为xls的文本文件中,并按照您的建议对我的层进行过滤,(vl load com)在开始时,它是这样的:
再次非常感谢你的帮助,这真的帮了我很大的忙。 嗨,朋友
不客气,谢谢你的赞赏。
我用点0,0,0来初始化列表。在每次比较测试中,保留最近的点并用于下一次测试。
我只是选择了一个点,它可以是任何其他点(你可以试试),只要其中一条多段线不在该点上开始(或结束)。
为了确保不会发生这种情况,应使用大于任何文本多段线距离(如1.0e+308)的数字,而不是(距离p1’(0.0 0.0)。
或者,您可以从文本选择集中提取第一个文本的位置,并使用它初始化列表。 伟大的代码Stefan
以下是另一个版本:
因为我有一些多段线从同一个点开始,还有一些从其他多段线的末端开始。
然而,没有选择这些是怎么回事
4
他们怎么了?
再次感谢李的帮助。我在这里学到了不少技巧。
没问题-
我自动假设存在文本和多段线端点的1:1配对,因此删除了已经配对的文本项,以提高程序在每次迭代中的性能。
80 = 16 + 64
不客气!
No problem -
I had automatically made the assumption that there was a 1-to-1 pairing of text & polyline end points, and hence removed the already paired text items in order to improve the performance of the program with each iteration.
80 = 16 + 64
You're most welcome!
页:
[1]