本帖最后由 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
- )
|