lisp点表的最近点最远点,多断线顶点最近点,lsp坐标点排序

  • A+
所属分类:CAD二次开发

谈到最近点,点肯定是两个以上的点,参考点和目标点不在一点才能说有最近点,。一个表里有很多坐标,那怎么通过排序来取得最远和最近的点了。这个肯定是要先把已知的点排序,不排序怎么知道大小了?所有我们的目标是要排序,排好序,大小要么在最前面,要么在最后面。

函数 (distance 点 1 点2)这个返回投影距离,比较远近

函数(vl-sort 表   比较函数),这个就是排序

下面例子已知一个点,求多段线顶点到已知点的最近点

(defun C:d1(/ pt ss pt1)
(setq pt (getpoint"\n选择点:"))
(setq ss(entsel"\伙计百科选择对象"))
(if(/= ss nil);如果有对象
(progn
(setq ss(car ss));如<图元名: 7ee7d240>

(setq i 0)
(setq ej1 (entget ss))
(setq ej3 nil)
(repeat (length ej1)
(if (= (car (nth i ej1)) 10)
(setq ej3 (append ej3 (list (cdr (nth i ej1)))));提取多段线顶点
)
(setq i (1+ i))
)

(setq ej3 (vl-sort ej3
'(lambda (a b)
(> (distance a pt) (distance b pt));大到小排列
))
)
)
)

(setq pt1 (last ej3)) ;最后一个元素
(princ pt1)
(command "LINE" pt1 pt "");连线验证
)

复制

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: