dcl1214 发表于 2024-5-5 16:35

点集分组可用于路径计算

本帖最后由 dcl1214 于 2024-5-7 05:47 编辑

很多直线构成的图纸中,从一点找其他点,或者是快速将点分组找到哪些线的端点在一起,本示例可以参考一下,如果谁有速度更快的方法,发上来切磋
本示例还可以找出孤岛线条
(DEFUN $dian-ji-fen-zu$        (pts rc lst / a b fzd i pt-fzd zj zj-t)
                                        ;点集分组
                                        ;pts 很多的坐标数据
                                        ;rc 容差
(or rc (setq rc 10))
(setq        pts (vl-sort pts
                     (function (lambda (x y)
                               (< (car X) (car Y))
                             )
                     )
          )
)                                        ;排序
(setq pts (vl-remove nil pts))
(setq pt-fzd nil)
(setq i 1)
(while (setq a (car pts))
    (SETQ ZJ-T NIL)
    (SETQ fzd NIL)
    (SETQ zj NIL)
    (setq old nil)
    (setq old-cdr nil)                        ;每个点给一个编号
    (cond
      (
       (and (setq
              old (vl-some (function (lambda (b)
                                     (if (<= (distance (cadr b) a) rc)
                                       b
                                     )
                                     )
                           )
                           pt-fzd
                  )
          )
          (setq fzd (car old))
          (setq old-cdr (cdr old))
          (setq old-cdr (cons a old-cdr))
          (setq pt-fzd (vl-remove old pt-fzd))
       )
       (setq pt-fzd (cons (cons fzd old-cdr) pt-fzd))
      )
      (t
       (if (> i 9)
       (setq fzd (strcat "J" (ITOA i)))
       (setq fzd (strcat "J0" (ITOA i)))
       )
       (setq pt-fzd (cons (cons fzd (list a)) pt-fzd))
       (setq i (1+ i))
      )
    )
    (setq pts (cdr pts))
)
(setq pt-fzd (reverse pt-fzd))
pt-fzd
)

guosheyang 发表于 2024-5-6 08:20

感谢杜总的分享!

chslwj521 发表于 2024-5-8 12:51

guosheyang 发表于 2024-5-6 08:20
感谢杜总的分享!

:D-感谢分享

ynhh 发表于 2024-5-9 11:11

有个实例就好理解了
谢谢
页: [1]
查看完整版本: 点集分组可用于路径计算