本帖最后由 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)
[函数内容] |;
- (defun Sort_PtsByDist (Pt0 Pts Mode / a b DIST I PT_Lst Pt1)
- (setq i -1
- PT_Lst '()
- )
- (while (setq Pt1 (nth (setq i (1+ i)) Pts))
- (setq dist (distance Pt0 Pt1) ;返回距离Pt0点的距离
- PT_Lst (cons (list dist Pt1) PT_Lst) ;返回格式:'((长度1 pt1) (长度2 pt2) ...)
- )
- )
- (if PT_Lst
- (progn
- (if Mode
- (setq PT_Lst (vl-sort PT_Lst '(lambda (a b) (< (car a) (car b))))) ;按距离排序 -- 从近到远
- (setq PT_Lst (vl-sort PT_Lst '(lambda (a b) (> (car a) (car b))))) ;按距离排序 -- 从远到近
- )
- (setq PT_Lst (mapcar 'cadr PT_Lst)) ;删除距离数值
- ;;(princ "\n-->> 排序后的表 = ")
- )
- )
- PT_Lst
- )
|