支持多个距离相同的点.(返回三层表)效果如图
暂不区别重合点.
 - (defun maxdispts (plst / dlst)
- (foreach p1 plst
- (foreach p2 (cdr (MEMBER p1 plst))
- (setq dlst (cons (list (distance p1 p2) p2 p1) dlst))
- )
- )
- (setq dlst (vl-sort dlst '(lambda (a b) (> (car a) (car b)))))
- (list (mapcar 'cdr (vl-remove-if '(lambda (a) (> (car (car dlst)) (car a))) dlst))
- (mapcar 'cdr (vl-remove-if '(lambda (a) (< (car (last dlst)) (car a))) dlst))
- )
- )
下面为测试代码:
[php]
(defun c:test (/ opd pt ptlst)
(setq opd (getvar "pdmode"))
(setvar "pdmode" 3)
(while (setq pt (getpoint "\n取点:"))
(vl-cmdf ".point" pt)
(setq ptlst (cons pt ptlst))
)
(foreach cmd (maxdispts ptlst)
(foreach l cmd (command "line" (car l) (last l) ""))
)
(setvar "pdmode" opd)
(princ)
)[/php] |