明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1691|回复: 19

[函数] 点表按最近点相连排序

[复制链接]
发表于 2022-1-29 22:09 | 显示全部楼层 |阅读模式
20明经币
求 从点表任一端的起点开始,按最近点相连排序

从黄点两点中任一点开始,将全部点按最近相连接排序后

自动画通过所有点的多段线连接





附件: 您需要 登录 才可以下载或查看,没有账号?注册
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-1-29 22:09 | 显示全部楼层
ynhh 发表于 2022-2-3 16:16
谢谢院长指导
您这个和
http://huojibk.com/2020/10/488.html

  1. (defun c:tt () ; tt(最近点连线)
  2. (if (setq ss (ssget '((0 . "point"))))
  3.   (progn
  4.    (setq lst  (xyp-Ss2List ss)
  5.          ss1  (ssget "P" '((0 . "point") (62 . 2)))
  6.          lst2 (vl-sort (xyp-Ss2List ss1)
  7.                        '(lambda (x y)
  8.                          (> (cadr (xyp-DXF 10 x)) (cadr (xyp-DXF 10 y)))
  9.                         )
  10.               )
  11.          s1   (car lst2)
  12.          lst  (vl-remove s1 lst)
  13.          lst1 (list s1)
  14.    )
  15.    (while lst
  16.     (setq p0   (xyp-DXF 10 s1)
  17.           lst  (vl-sort lst
  18.                         '(lambda (x y)
  19.                           (< (distance (xyp-DXF 10 x) p0)
  20.                              (distance (xyp-DXF 10 y) p0)
  21.                           )
  22.                          )
  23.                )
  24.           s1   (car lst)
  25.           lst  (cdr lst)
  26.           lst1 (cons s1 lst1)
  27.     )
  28.    )
  29.    (setq ptn (mapcar '(lambda (x) (xyp-DXF 10 x)) (reverse lst1)))
  30.    (xyp-Pline ptn nil)
  31.   )
  32. )
  33. (princ)
  34. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2022-1-29 22:50 | 显示全部楼层
楼主多年前回过这个帖子
这有个速度不算快但能用的帖子
http://bbs.mjtd.com/forum.php?mo ... AC%CF%DF&page=1
回复

使用道具 举报

 楼主| 发表于 2022-1-30 12:46 | 显示全部楼层
tigcat 发表于 2022-1-29 22:50
楼主多年前回过这个帖子
这有个速度不算快但能用的帖子
http://bbs.mjtd.com/forum.php?mod=viewthread&t ...

谢谢您这么好的精神
我都记不得了
如没更好的方法
定选您为最佳答案
谢谢
回复

使用道具 举报

发表于 2022-1-31 17:13 | 显示全部楼层
本帖最后由 dtucad 于 2022-2-3 22:00 编辑

我发的代码本来就是一次选择生成的 楼主自己不测试 还在问
本代码已删除 自己折腾去吧


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2022-2-1 20:46 | 显示全部楼层
本帖最后由 ynhh 于 2022-2-1 21:01 编辑
dtucad 发表于 2022-1-31 17:13
楼主的图纸中间部分有非最近点的情况,这个代码只能实现最近点连线

谢谢您
图中的黄色点仅是示意,是指以点集中开口较大(即相邻两点距离最大)的任一端为起点。

这有个也不错,但要手工指定起点

请您看看能不能改成自动判断不用手工指定起点
http://huojibk.com/2020/10/488.html


(defun c:tt (/ lst ss n en pt lst pt1)
(setq ss (ssget '((0 . "point"))) n 0);;请选择点
(repeat (sslength ss);;循环选择
(setq en (ssname ss n);;提取图元
pt (trans(cdr (assoc 10 (entget en))) en 1);;取得点坐标 UCS
lst (cons pt lst);;加入表
n (+ n 1)
)
)
(princ lst)
(setq pt (getpoint "huojibk.com指定开始点"))
(command "spline") ;样条曲线命令
(repeat (length lst);循环计算
(setq lst (vl-sort lst
'(lambda (a b)
(> (distance a pt) (distance b pt));最近点排续
)
)
)
(setq pt1 (last lst));最后一个
(command pt pt1 )
(setq pt (last lst))
(setq lst (cdr(reverse lst)))
)
(command "" "" "")
)

---------------------
《伙计百科》版权所有。
源地址:http://huojibk.com/2020/10/488.html
版权声明:转载请附上博文链接!


回复

使用道具 举报

发表于 2022-2-3 14:15 | 显示全部楼层
  1. (defun c:tt (); tt(最近点连线)
  2. (if (and (setq ss (ssget '((0 . "point"))))
  3.           (setq s1 (car (entsel "\n选择起点: ")))
  4.      )
  5.   (progn
  6.    (setq lst  (vl-remove s1 (xyp-Ss2List ss))
  7.          lst1 (list s1)
  8.    )
  9.    (while lst
  10.     (setq p0   (xyp-DXF 10 s1)
  11.           lst  (vl-sort lst
  12.                         '(lambda (x y)
  13.                           (< (distance (xyp-DXF 10 x) p0)
  14.                              (distance (xyp-DXF 10 y) p0)
  15.                           )
  16.                          )
  17.                )
  18.           s1   (car lst)
  19.           lst  (cdr lst)
  20.           lst1 (cons s1 lst1)
  21.     )
  22.    )
  23.    (setq ptn (mapcar '(lambda (x) (xyp-DXF 10 x)) (reverse lst1)))
  24.    (xyp-Pline ptn nil)
  25.   )
  26. )
  27. (princ)
  28. )


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2022-2-3 16:16 | 显示全部楼层

谢谢院长指导
您这个和
http://huojibk.com/2020/10/488.html
感觉是一样的啊
请教能不能将其改为自动选择点集中开口较大(即相邻两点距离最大)的任一端为起点
就省了一步手工指定起点了
谢谢您
回复

使用道具 举报

 楼主| 发表于 2022-2-3 20:39 | 显示全部楼层

院长威武
能不能大方提供一下这几个函数啊
xyp-Ss2List
xyp-DXF
xyp-Pline
谢谢,无论您是否提供,还是选择您为最佳结果了,感谢您的热心指导。

点评

自定义函数:http://bbs.mjtd.com/thread-95673-1-1.html  发表于 2022-2-3 21:18
回复

使用道具 举报

 楼主| 发表于 2022-2-4 09:19 | 显示全部楼层

XYP-SS2LIST
院长您公开的函数中就找不到这个啊
如你方便能不能提供一下
谢谢您了

点评

(defun xyp-Ss2List(ss)(vl-remove-if-not'(lambda(x)(equal(type x)'ENAME))(mapcar'cadr(ssnamex ss))))  发表于 2022-2-7 15:08
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-17 07:12 , Processed in 0.437841 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表