Lee Mac 发表于 2022-7-5 15:50:35

多段线顶点问题

大家好,
 
祝大家圣诞快乐,新年快乐。
 
只是一个简单的问题,我相信几分钟内就能回答。
 
当看到最近在这里发布的一个问题(关于在高尔夫球场上标记点…)时,我在考虑如何解决这个问题,并考虑使用用户绘制的多段线的顶点。
 
为了进行实验,我给自己画了一条多段线(附加),并对其执行entget操作,以查看它将返回什么。
 
结果如下:
 

((-1 . <Entity name: 7ef62ed8>)
(0 . "LWPOLYLINE")<<--- Entity Type
(330 . <Entity name: 7ef53cc0>)
(5 . "2DC3")
(100 . "AcDbEntity")
(67 . 0)
(410 . "Model")<<--- Tab Name
(8 . "3")<<--- Layer Name
(100 . "AcDbPolyline")
(90 . 4)
(70 . 0)
(43 . 0.0)
(38 . 0.0)
(39 . 0.0)
(10 0.0 0.0)<<--- First Vertex (Start Point)
(40 . 0.0)   <<--- Starting Thickness for First Segment
(41 . 0.0)<<--- Ending Thickness for First Segment
(42 . 0.0)
(10 10.0 0.0)   <<--- Second Vertex
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(10 10.0 10.0)<<--- Third Vertex
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(10 0.0 10.0)<<--- Fourth Vertex (End Point)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(210 0.0 0.0 1.0))

 
删除所有非10组:
 

(defun c:test (/ ent Vertex)
   (setq ent (entget (car (entsel))))
   (setq Vertex (cdr (assoc 10 ent)))
   (princ)
) ;_end defun

 
删除每个列表的第一个成员“
 
Command: (setq plDxf(entget(car(entsel))))

Select object: ((-1 . <Entity name: 7efa3368>) (0 . "LWPOLYLINE") (330 .
<Entity name: 7efa1cf8>) (5 . "1AD") (100 . "AcDbEntity") (67 . 0) (410 .
"Model") (8 . "0") (100 . "AcDbPolyline") (90 . 4) (70 . 0) (43 . 0.0) (38 .
0.0) (39 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 10.0 0.0) (40
. 0.0) (41 . 0.0) (42 . 0.0) (10 10.0 10.0) (40 . 0.0) (41 . 0.0) (42 . 0.0)
(10 0.0 10.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))

 
或者立即:
 
Command: (setq lst10(vl-remove-if '(lambda(x)(/= 10(car x)))plDxf))
((10 0.0 0.0) (10 10.0 0.0) (10 10.0 10.0) (10 0.0 10.0))

ASMI 发表于 2022-7-5 15:56:50

谢谢你的回复,阿斯米-我从中学到了很多。
 
但是,我注意到这只适用于这个例子——例如,如果我有带坐标的顶点:
 
(1.0 5.0 0.0)
(2.0 6.0 0.0)
(3.0 7.0 0.0)
 
我该如何处理这种情况?
 
是否没有通用函数来处理同一DXF组码的多次出现?
 
谢谢你的帮助,非常感谢。

Lee Mac 发表于 2022-7-5 15:59:05

它将适用于每个LW多段线。

ASMI 发表于 2022-7-5 16:01:55

啊,对不起,我误读了你上一篇文章-当你删除DXF 10代码。很抱歉
 
谢谢你的帮助!

Lee Mac 发表于 2022-7-5 16:04:45

这可能会让你感兴趣。。。
http://www.theswamp.org/index.php?topic=23951.0

lpseifert 发表于 2022-7-5 16:08:44

谢谢lpseifert,
 
这很有趣!

Lee Mac 发表于 2022-7-5 16:10:45

这将返回列表中键的值列表。正是为了应对这种情况。
 
你将不得不为每一个额外的编码等。
 
-大卫

David Bethel 发表于 2022-7-5 16:13:48

很好,大卫,
 
简单有效。不错的一个
 
谢谢

Lee Mac 发表于 2022-7-5 16:18:09

我可能在这里遗漏了什么,但可以从多段线中获取点并将其保存为pt1、pt2、pt3。。。。这样就可以在另一个命令中使用?

KRBeckman 发表于 2022-7-5 16:19:31

 
哇!这是一条古老的线索-让我回到我开始学习这一切的时候。。
 
至于你的问题,所有的点数据都在结果列表中,因此你可以从中分配变量。
 
但我会用不同的方法,使用vlax curve getPointatParam,因为你有更多的控制。
页: [1] 2
查看完整版本: 多段线顶点问题