- 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 "");连线验证
)
复制