找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2306|回复: 14

[已解决] 有没有这样一个api函数,求一个实体与选择集中实体最近的图元及其最近点

[复制链接]

已领礼包: 202个

财富等级: 日进斗金

发表于 2020-8-20 09:54:09 | 显示全部楼层 |阅读模式
悬赏20D豆已解决
本帖最后由 dyjwyqz5221 于 2020-8-20 09:57 编辑

参照之前大师们的指导及插件,这样一个函数是可以求出一条多段线或text文字距离多段线或文字选择集中最近图元及最近点的。

有没有这样的api函数呢,当然我水平有限,还不能罗列其他类型的实体。

(defun get::nearent (e ss / g1 get::g)
                (defun get::g (e)
                        (cond
                                ((xdrx-object-isa e "AcDbPolyline")
                                        (xdge::constructor e)
                                )
                                ((xdrx-object-isa e "AcDbText")
                                        (xdge::constructor "kcompositecrv3d" (xdrx-text-box e))
                                )
                        );;;cond
                );;;defun
                (cond
                        ((equal (type ss) 'ENAME)
                                (setq ss (list ss))                        )
                        (( equal (type ss) 'pickset)
                                (setq ss (xdrx-pickset->ents ss))
                        )
                );;;cond
                (setq g1 (get::g e))
                (cadar
                        (vl-sort
                                (mapcar
                                        '(lambda(x / g2 ints)
                                                (setq g2 (get::g x))
                                                (setq ints (xdge::getpropertyvalue g1 "closestPointTo" g2))
                                                (list (apply 'distance ints) (cons x ints))        
                                        );;;lambda
                                        ss
                                );;;mapcar
                                '(lambda (a b)
                                        (< (car a) (car b))
                                )
                        )
                );;;cadar
)





最佳答案

查看完整内容

下载 2020.08.21 API (xdrx-getpropertyvalue ent "GetClosestEnts" ) 命令: (xdrx-getpropertyvalue ent "GetClosestEnts" (ssget)) 选择对象: 找到 1 个 选择对象: 指定对角点: 找到 2 个,总计 3 个 选择对象: (( (696.698 -303.839 0.0)) ( (696.698 -303.839 0.0)))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-8-20 09:54:10 | 显示全部楼层
dyjwyqz5221 发表于 2020-8-20 11:25
有时候,要查找边框最近的实体

下载 2020.08.21 API

(xdrx-getpropertyvalue ent "GetClosestEnts" <ss or ent.....>)

命令: (xdrx-getpropertyvalue ent "GetClosestEnts" (ssget))

选择对象: 找到 1 个

选择对象: 指定对角点: 找到 2 个,总计 3 个

选择对象:
((<图元名: 21ef7ad9190> (696.698 -303.839 0.0)) (<图元名: 21ef7ad9190> (696.698 -303.839 0.0)))

点评

查找文字图元距离文字选择集中最近文字时,是不可以。  详情 回复 发表于 2021-4-17 22:08

评分

参与人数 1D豆 +100 收起 理由
dyjwyqz5221 + 100 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-20 10:29:36 | 显示全部楼层
最近你是指从哪算呢?
你可以求实体的型心代替实体去找
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-8-20 11:25:52 | 显示全部楼层
有时候,要查找边框最近的实体

点评

下载 2020.08.21 API (xdrx-getpropertyvalue ent "GetClosestEnts" ) 命令: (xdrx-getpropertyvalue ent "GetClosestEnts" (ssget)) 选择对象: 找到 1 个 选择对象: 指定对角点: 找到 2 个,总计 3 个  详情 回复 发表于 2020-8-21 03:09
那你就用包围盒四个顶点,建立个几何实体,去找最近的曲线  详情 回复 发表于 2020-8-20 13:24
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-20 13:24:31 | 显示全部楼层
本帖最后由 newer 于 2020-8-20 13:28 编辑
dyjwyqz5221 发表于 2020-8-20 11:25
有时候,要查找边框最近的实体

那你就用包围盒四个顶点,建立个几何实体,用 closestpointto 去找其他最近的曲线
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-20 15:57:06 | 显示全部楼层
本帖最后由 newer 于 2020-8-20 16:20 编辑

  1. (defun xd::geom:getnearpt (e1 ss / box dis g1 ge ge1 ges lst ret x y)
  2.   (if (= (type ss) 'pickset)
  3.     (setq ss (xdrx-pickset->ents ss))
  4.   )
  5.   (setq        lst (mapcar '(lambda (x)
  6.                        (cond ((xdrx-object-iskindof x "acdbcurve")
  7.                               (setq ge (xdge::constructor x))
  8.                              )
  9.                              ((xdrx-object-iskindof x "acdbtext")
  10.                               (setq ge (xdge::constructor
  11.                                          "kcompositecrv3d"
  12.                                          (xd::pnts:close (xdrx-text-box x))
  13.                                        )
  14.                               )
  15.                              )
  16.                              (t
  17.                               (setq box        (xdrx-points-ucs2wcs (xdrx-entity-box x))
  18.                                     ge        (xdge::constructor "kcompositecrv3d"
  19.                                                            (xd::pnts:close box)
  20.                                         )
  21.                               )
  22.                              )
  23.                        )
  24.                        (setq ges (cons ge ges))
  25.                        (list ge x)
  26.                      )
  27.                     ss
  28.             )
  29.         g1  (if        (not (xdrx-object-iskindof e1 "acdbcurve"))
  30.               (progn (setq ge1 (xdge::constructor "kcompositecrv3d"
  31.                                                   (xd::pnts:close (xdrx-entity-box e1))
  32.                                )
  33.                            ges (cons ge1)
  34.                      )
  35.                      ge1
  36.               )
  37.               e1
  38.             )
  39.         lst (mapcar '(lambda (x)
  40.                        (setq ret (xdrx-getpropertyvalue        g1
  41.                                                         "getclosestpointto"
  42.                                                         (car x)
  43.                                  )
  44.                              dis (apply 'distance ret)
  45.                        )
  46.                        (list dis (list e1 (car ret))(list (cadr x)(cadr ret)))
  47.                      )
  48.                     lst
  49.             )
  50.         lst (vl-sort lst '(lambda (x y) (< (car x) (car y))))
  51.   )
  52.   (xdrx-free ges)
  53.   (cdar lst)
  54. )


命令: (setq a (XD::GEOM:GETNEARPT e ss))
((<图元名: 16c2dce9b70> (1413.73 -1519.64 0.0)) (<图元名: 16c2dce9b80> (1995.16 -55.6127 0.0)))


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 48个

财富等级: 招财进宝

发表于 2021-4-15 21:37:23 | 显示全部楼层
本帖最后由 pxt2015 于 2021-4-15 21:45 编辑

图元名与图元名(选择集)最近点,这个功能很强大。
(setq xd-getval xdrx_getpropertyValue)
(setq a (xd-getval en "GetClosestEnts" ss或en))
;;返回 ((en1 pt1) (en2 pt2))


(xdrx-line-make (mapcar 'cadr a))

以上代码运行效果如截图所示(箭头是另外加的,表示en和ss谁主动)
微信截图_20210328155714.png




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2021-4-17 22:08:55 | 显示全部楼层
XDSoft 发表于 2020-8-20 09:54
下载 2020.08.21 API

(xdrx-getpropertyvalue ent "GetClosestEnts" )

查找文字图元距离文字选择集中最近文字时,是不可以。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2021-5-9 09:50:23 | 显示全部楼层
终于测试出来了,可以采用这个来使用:
(xdrx-getpropertyvalue (xdrx-text-box (car(entsel))) "GetClosestEnts" (ssget))
返回的结果为:
((<图元名: b602a4> (1.94404e+006 933331.0 0.0)) (<图元名: 7ff469ef2210> (1.94371e+006 933331.0 0.0)))
前面这个点为文字上的点,后面这个为拟查找的文字选择集上最近的图元及点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2021-8-17 14:40:11 | 显示全部楼层
(xdrx-getpropertyvalue (XD::PnTs:Close (xdrx-text-box (car(entsel)))) "GetClosestEnts" (ssget))
这样使用更准确,是从文字的周边查找与选择最近的点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 00:11 , Processed in 0.456463 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表