明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 785|回复: 5

[提问] 如何将直线XY坐标按线段长短排序输出

[复制链接]
发表于 2022-11-27 01:52:57 | 显示全部楼层 |阅读模式
3明经币
如图所示,如何将直线XY坐标按线段长短排序输出到文本?
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

刚好函数库里有,给你个,自己修改下,加上基点到表里面,再输出到文本 ;|;________________________________________________________________________________________ [■函数] (Sort_PtsByDist Pt0 Pts Mode) [功 能] 指定点Pt0距离坐标点集中各个点的远近排序(点表远近排序) -- 按距离Pt0点的远近进行排序 [参 数] Pt0 --- 排序的基点,起始点 Pts --- 要排序的点表 Mode -- 排序方式。为T时 -- ...
发表于 2022-11-27 01:52:58 | 显示全部楼层
本帖最后由 mj0000 于 2022-11-27 11:39 编辑

刚好函数库里有,给你个,自己修改下,加上基点到表里面,再输出到文本
;|;________________________________________________________________________________________
[■函数] (Sort_PtsByDist Pt0 Pts Mode)
[功  能] 指定点Pt0距离坐标点集中各个点的远近排序(点表远近排序) -- 按距离Pt0点的远近进行排序
[参  数] Pt0 --- 排序的基点,起始点
         Pts --- 要排序的点表
         Mode -- 排序方式。为T时 -- 从近到远排序,为nil时 -- 从远到近排序
[返回值] 排序后的表
[测  试] (Sort_PtsByDist (getpoint "\n基点: ")  (list (getpoint "\n点1: ") (getpoint "\n点2: ") (getpoint "\n点3: ") (getpoint "\n点4: ")) T)
[函数内容] |;
  1. (defun Sort_PtsByDist (Pt0 Pts Mode / a b DIST I PT_Lst Pt1)
  2.   (setq i -1
  3.         PT_Lst '()
  4.   )
  5.   (while (setq Pt1 (nth (setq i (1+ i)) Pts))
  6.     (setq dist   (distance Pt0 Pt1) ;返回距离Pt0点的距离
  7.           PT_Lst (cons (list dist Pt1) PT_Lst) ;返回格式:'((长度1 pt1) (长度2 pt2) ...)
  8.     )
  9.   )
  10.   (if PT_Lst
  11.     (progn
  12.       (if Mode
  13.         (setq PT_Lst (vl-sort PT_Lst '(lambda (a b) (< (car a) (car b))))) ;按距离排序 -- 从近到远
  14.         (setq PT_Lst (vl-sort PT_Lst '(lambda (a b) (> (car a) (car b))))) ;按距离排序 -- 从远到近
  15.       )
  16.       (setq PT_Lst (mapcar 'cadr PT_Lst)) ;删除距离数值
  17.       ;;(princ "\n-->> 排序后的表 = ")
  18.     )
  19.   )
  20.   PT_Lst
  21. )

回复

使用道具 举报

发表于 2022-11-27 11:16:59 | 显示全部楼层
可以(cons 距离 点),这样以“距离”来排序,然后去掉距离,就是点了。
回复

使用道具 举报

发表于 2022-11-27 16:35:13 | 显示全部楼层

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2022-11-28 20:37:14 | 显示全部楼层
mj0000 发表于 2022-11-27 11:36
刚好函数库里有,给你个,自己修改下,加上基点到表里面,再输出到文本
;|;_____________________________ ...
  1.       (repeat (sslength ss)
  2.         (setq en  (ssname ss i)
  3.               ent (entget en)
  4.               pt  (cdr (assoc 10 ent))
  5.               pt_1  (cdr (assoc 11 ent))
  6.               dist (distance pt pt_1)
  7.               j 0)
  8.         (setq biao (append biao (list (list dist pt pt_1))))
  9.         (setq biao (vl-sort biao '(lambda (a b) (< (car a) (car b)))))
  10.         (setq i  (1+ i))
  11.         );repeat

谢谢,看了你代码里的距离提醒了我,我在表内直接加入了起点到终点的距离可以达到效果了。现在又遇到另一个问题:当有线条起点不是P0时得到的表就不正确了,比如有条直线是起点是P3,终点是P0
回复

使用道具 举报

发表于 2022-11-29 07:32:06 | 显示全部楼层
你加入起点的位置,加个判断,判断直线10和11组码坐标,距离P0点的距离就可以了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 02:19 , Processed in 0.209778 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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