夏生生 发表于 2012-1-6 17:11:18

最小圆心距,请高手加最小间距圆变色

写了个圆心距的程序,最小距离可求出了,但判断不出是哪两个间距最小,或人为定最小距离,将小于该距离的圆标示出来。请高手加最小间距圆变色,谢谢;;;最小圆心距,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

Andyhon 发表于 2012-1-6 17:17:02

若在圆心位加个 POINT 处理会省事些

nzl1116 发表于 2012-1-6 17:21:43

在最后一个循环里加两个变量,一个保存最小的距离,一个保存这个距离的两个圆心,一旦循环发现有更小的距离,就更新这两个变量

xyp1964 发表于 2012-5-10 22:17:39



;; 最小圆心距 伪源码 需要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)
)

wutao8282 发表于 2022-4-28 22:00:59

xyp1964 发表于 2012-5-10 22:17


老师您好!能不能间距低于一定数值批量全部标出来
页: [1]
查看完整版本: 最小圆心距,请高手加最小间距圆变色