ctdlc888 发表于 2022-7-6 08:09:27

使用distanc查找点对

您好lisp masters。我在这里搜索了很多,但找不到可以识别的lisp
几乎是重复点,我发现的是重复查找器。假设我需要知道哪些点距离小于5米(或任何数字公差)。我们总是收到包含许多GPS XY坐标的图纸,其中包含大量的多个观测值/坐标,应将其视为一个。我们需要精确的计数。
谢谢你的帮助。

SLW210 发表于 2022-7-6 08:18:59

我把这个移到了AutoLISP、Visual LISP和DCL论坛。

ketxu 发表于 2022-7-6 08:21:02

你为什么不把你的画贴出来,你想要的结果是什么?

pBe 发表于 2022-7-6 08:26:00

------->进一步的测试导致无法给出准确的计数

(defun c:test(/ seek fuzz cnt i plst)
(vl-load-com)
(defun seek(pt fz lst / sk lst)
         (setq sk   (ssget "_C"
                           (polar pt (* pi 0.25) (* fz (sqrt 2)))
                           (polar pt (* pi 1.25) (* fz (sqrt 2)))
                           '((0 . "POINT"))))
         (repeat (sslength sk)
               (setq lst (cons (ssname sk 0) lst))
               (ssdel (ssname sk 0) sk))
         lst
         )
   (if (and (setq fuzz (getdist "\nEmter Fuzz Value: "))
            (setq plst nil
                  cnt0
                  ss   (ssget "_X" (list '(0 . "POINT")(cons 410 (getvar 'Ctab))))))
         (progn (vla-zoomextents (vlax-get-acad-object))
               (repeat (setq i (sslength ss))
                        (setq en (ssname ss (setq i (1- i))))
                        (if (not (member en plst))
                              (setq plst (seek (cdr (assoc 10
                                                         (entget en)))
                                             fuzz
                                             plst)
                                    cnt(1+ cnt))(entmod (subst (cons 8 "DuplicatePoints")
                                                               (assoc 8 (entget en)) (entget en))))
                        )
                  (princ (strcat "\n"
                                 (itoa cnt)
                                 " Points Found")))
         )
   (princ)
   )


 
更新为包括在图层“DuplicatePoints”上放置重复项
:::::代码故障::::::

David Bethel 发表于 2022-7-6 08:29:33

我会尝试:
 
(defun c:findpt(/fuzz ss bp ps en pp);ts是全局(initget 7)(setq fuzz(getdist color=#2f4f4f]“\n公差距离:“)(和color=NAVY](。princ“\n选择基点:”[1(setq bp(cdr(assoc 10(entget(ssname ss 0)[蓝】(setq ps(ssget“_C”(list(-(car bp)fuzz b](-cadr bpfuzz)(list((car bp)fuzz(cadr bp)fuzz b]“[颜色=绿色]((0.“POINT”(setq ts(ssadd)[(而(setq en(ssname ps 0)(setq pp(cdr(assoc 10(entget en)b](和(不是(等于bp pp)(

pBe 发表于 2022-7-6 08:38:20

你说得有道理,大卫。。。
 
我去看看。tnx公司

Lee Mac 发表于 2022-7-6 08:40:30

这里有一种“分而治之”的方法:
 
(定义c:ptcount(/a b d e f i s x y)(设定值f 5.0;;公差d’(8“$DUPLICATE-POINTS$”);;重复点层)(if(setq s(ssget“_X”'((0。“点”)(410。“模型”)))(progn(setq a(vl sort(repeat(setq i(sslength s))(setq e(entget(ssname s(setq i(1-i)))a(cons(cons(cdr(assoc 10 e))e)a)))'(lambda(a b) (

pBe 发表于 2022-7-6 08:49:07

更新了代码
 
与使用距离函数的Davids和LMs代码不同。我选择使用llist来控制选择,这样我就不需要考虑Z值。但仍然需要设置osmode,当前的缩放将是一个因素。

ctdlc888 发表于 2022-7-6 08:53:57

坦克好家伙pBe,大卫,李,我试试。
@这是我的问题。。
http://www.4shared.com/photo/tTI3tUks/AcadDup.html

ctdlc888 发表于 2022-7-6 08:57:57

@LM。可以提示输入新图层的公差和颜色吗?
如果不是太多的要求。谢谢
你的工作很好。我只是将“setq f 5”更改为其他数字以获得容差
页: [1] 2
查看完整版本: 使用distanc查找点对