最小圆心距,请高手加最小间距圆变色
写了个圆心距的程序,最小距离可求出了,但判断不出是哪两个间距最小,或人为定最小距离,将小于该距离的圆标示出来。请高手加最小间距圆变色,谢谢;;;最小圆心距,by x_s_s_1@163.com(defun c:zxjj ( / ss n i en_list center_circle_list dist_list min_dist)
(setq ss (ssget '((0 . "circle"))))
(setq n (sslength ss))
(setq i 0)
(setq en_list nil)
(while (< i n)
(setq en_list (cons (ssname ss i) en_list))
(setq i (1+ i))
) ;_ 结束while
(setq center_circle_list
(mapcar
'(lambda (en) (cdr (assoc 10 (entget en))))
en_list
) ;_ 结束mapcar
) ;_ 结束setq
(setq dist_list nil)
(while (< 1 (length center_circle_list))
(setq dist_list
(append
(mapcar
'(lambda (x) (distance (car center_circle_list) x))
(cdr center_circle_list)
) ;_ 结束mapcar
dist_list
) ;_ 结束append
) ;_ 结束setq
(setq center_circle_list (cdr center_circle_list))
) ;_ 结束while
(princ (setq min_dist (apply 'min dist_list)))
) ;_ 结束defun
若在圆心位加个 POINT 处理会省事些 在最后一个循环里加两个变量,一个保存最小的距离,一个保存这个距离的两个圆心,一旦循环发现有更小的距离,就更新这两个变量
;; 最小圆心距 伪源码 需要e派工具箱(XCAD)的支持
(defun c:tt ()
(setq ss(ssget '((0 . "circle")))
lst (list (setq s1 (ssname ss 0))
(setq s2 (ssname ss 1))
(distance (xyp-get-dxf 10 s1) (xyp-get-dxf 10 s2))
)
i -1
)
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq j i)
(while (setq s2 (ssname ss (setq j (1+ j))))
(setq leng (distance (xyp-get-dxf 10 s1) (xyp-get-dxf 10 s2))
lst(if (< leng (caddr lst))
(list s1 s2 leng)
lst
)
)
)
)
(xyp-line (xyp-get-dxf 10 (car lst))
(xyp-get-dxf 10 (cadr lst))
)
(princ)
)
xyp1964 发表于 2012-5-10 22:17
老师您好!能不能间距低于一定数值批量全部标出来
页:
[1]