pxt2015 发表于 2020-9-21 23:26:31

xdrx_points_ClosestPair 用法疑问

(xdrx_points_ClosestPair (Xdrx-Entity-Getstretchpoint (car (entsel "\nPline:"))))

返回 ((362057.0 -63731.8 0.0) 2466.6)
这怎么理解?找用户手册也找不到。



期望是找到最近的两点对(点1 点2)
如果能够两两分组更好了。如下图,返回(组1 组2 组3 组4 组5)


XDSoft 发表于 2020-9-22 00:07:22

(setq pts (xdrx-getpropertyvalue (entlast) "vertices"))

(xdrx_points_ClosestPair pts t t)
(xdrx_points_ClosestPair pts nil)
(((5179.83 1609.58 0.0) (5143.31 1709.95 0.0)))

newer 发表于 2020-9-22 03:33:14


(defun c:tt ()
(if (setq ss (xdrx-ssget "\n选择点集<退出>:" '((0 . "point"))))
    (progn
      (setq pts (xdrx-getpropertyvalue ss "position"))
      (while (> (length pts) 2)
        (if (setq a (xdrx-points-closestpair pts nil))
          (progn (setq b (car a))
               (xdrx-line-make b)
               (mapcar '(lambda (x) (setq pts (vl-remove x pts))) b)
          )
        )
      )
    )
)
(princ)
)

pxt2015 发表于 2020-9-22 06:57:34

本帖最后由 pxt2015 于 2020-9-22 12:20 编辑

XDSoft 发表于 2020-9-22 00:07
(setq pts (xdrx-getpropertyvalue (entlast) "vertices"))

(xdrx_points_ClosestPair pts t t)

感谢XD老大指点。(xdrx_points_ClosestPair pts t t)似乎是返回最近点对划线后的图元名?
(xdrx_points_ClosestPair pts nil)返回最近点对((p1 p2))走弯路了,不如直接返回(p1 p2)

newer 发表于 2020-9-22 19:31:09

本帖最后由 newer 于 2020-9-22 19:33 编辑

pxt2015 发表于 2020-9-22 06:57
感谢XD老大指点。(xdrx_points_ClosestPair pts t t)似乎是返回最近点对划线后的图元名?
(xdrx_points_ ...
((p1 p2)) 为什么返回多层括号,是因为可能出现多个距离相等的点对( (p1 p2) (p3 p4) )
为什么加两个 t t 或 nil nil

第一个参数为t , 是求和点表第一个元素最近的点对(指定点)
第一个参数是nil , 是求点表中任意点间的最小点对

第二个参数nil, 返回表,
第二个参数t ,是用LINE绘制出来

pxt2015 发表于 2020-9-22 20:49:49

newer 发表于 2020-9-22 19:31
((p1 p2)) 为什么返回多层括号,是因为可能出现多个距离相等的点对( (p1 p2) (p3 p4) )
为什么加两个 t ...

豁然开朗啊,没想到这个函数功能这么强大。

但是(setq a (CAR (xdrx-points-closestpair pts NIL))),当点表pts长度为2时返回nil,似乎不符合预期

XDSoft 发表于 2020-9-22 21:28:30

pxt2015 发表于 2020-9-22 20:49
豁然开朗啊,没想到这个函数功能这么强大。

但是(setq a (CAR (xdrx-points-closestpair pts NIL))), ...

下版本API更新
没更新前,自己先LISP判断下吧

pxt2015 发表于 2020-9-26 12:44:02

请问: (xdrx_getpropertyvalue pl "vertices")
对于闭合矩形(4顶点),返回顶点数量为5,这怎么理解?

dyjwyqz5221 发表于 2020-9-30 14:09:19

pxt2015 发表于 2020-9-26 12:44
请问: (xdrx_getpropertyvalue pl "vertices")
对于闭合矩形(4顶点),返回顶点数量为5,这怎么理解?

4点的点表,用(xdrx-polyline-make pts t)后就会出现顶点数为5的情况。可以采用(xdrx-polyline-compress e 7)将多余顶点消除掉。

pxt2015 发表于 2020-10-1 01:02:35

(command "RECTANG" pause pause)
(length (xdrx_getpropertyvalue (entlast) "vertices")) 返回5,第5点和第1点重合 ,似乎不符合逻辑

pxt2015 发表于 2020-10-1 01:11:01

dyjwyqz5221 发表于 2020-9-30 14:09
4点的点表,用(xdrx-polyline-make pts t)后就会出现顶点数为5的情况。可以采用(xdrx-polyline-compress...

目标是取得多义线顶点表,如果需要取点后再去重复点,效率低,不如直接用(Xdrx-Entity-Getstretchpoint en)

yaojing38 发表于 2023-2-11 12:50:53

谢谢分享很实用
页: [1]
查看完整版本: xdrx_points_ClosestPair 用法疑问