找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1077|回复: 5

[求助] 关于点表跟一个点对比找出所有最近的点

[复制链接]

已领礼包: 394个

财富等级: 日进斗金

发表于 2013-6-3 01:19:07 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
今天看论坛好多点表排序,想再请教一下:
假如框选了一批直线或多段线,求出它们的起点和终点的所有点表ptlst,然后另外再指定一个点pt,想通过这个pt点来对比点表ptlst求出每根线离这pt点最近的点,然后设为线的起点,请问要怎么写,求个代码学习学习,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-3 01:30:00 | 显示全部楼层
只说不好理解,你画个图贴上来吧。前后的对比。包括测试的DWG文件。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-3 08:02:13 | 显示全部楼层
排序仅是一种“说法”,要根据具体情况了运用,对LZ的的要求可以叫排序,其实对仅有两点的情况下用距离判断更简单,不一定要 Sort
下面的例子是对 Line 的一个修改,用了 entmod , Pline的原理也一样,只是Pline的倒置要另外写过函数,论坛上有(entmod 或者 Put-Coordinates 方法都可以)
还可以用cad的Reverse命令 (2014有,不知道其他版本),用命令的话,先收集实体构造选择集,最后用 reverse 对选择集操作
[pcode=lisp,true](defun revln (lst pt)
  (mapcar '(lambda (x)
      (setq p1 (caar x)
     p2 (cadar x)
     l  (cadr x)
      )
      (if (> (distance p1 pt) (distance p2 pt))
        (progn
   (setq l (subst (cons 10 p2)
    (assoc 10 l)
    l
    )
         l (subst (cons 11 p1)
    (assoc 11 l)
    l
    )
   )
   (entmod l)
        )
      )
    )
   lst
  )
)
;;test
(defun c:tt ()
  (setvar "nomutt" 1)
  (vl-catch-all-apply
    '(lambda (/ ss sl i e lst)
       (princ "\n选择 Line....")
       (if (and (setq ss (ssget '((0 . "LINE"))))
  (setvar "nomutt" 0)
  (setq p (getpoint "\n基点: "))
    )
  (progn
    (setq sl (sslength ss)
   i  -1
    )
    (repeat sl
      (setq e   (ssname ss (setq i (1+ i)))
     lst (cons (list (list (vlax-curve-getstartpoint e)
      (vlax-curve-getendpoint e)
       )
       (entget e)
        )
        lst
         )
      )
    )
    (revln lst p)
  )
       )
     )
  )
  (setvar "nomutt" 0)
  (princ)
)[/pcode]

评分

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

查看全部评分

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

使用道具 举报

发表于 2013-6-3 12:32:48 | 显示全部楼层
本帖最后由 wowan1314 于 2013-6-3 12:35 编辑

直接用VL-SORT函数对点表排序。
(setq PTLST (vl-sort PTLST '(lambda (A B) (< (distance PT A) (distance PT B)))))
排序完 那么表内第一个元素就是距离PT最近的点。 (不知道上面写对了没,反正不是第一个就是最后一个)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-6-3 13:14:41 来自手机 | 显示全部楼层
只有两个点的时候再用vl-sort就教条了,也不高效,lz这个题目可以实质就一个比较距离,而且只有两个点,起点 终点组成表,仅判断一次即可,不满足起点近的直接交换,不用再绕弯去排序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 394个

财富等级: 日进斗金

 楼主| 发表于 2013-6-3 13:34:16 | 显示全部楼层
谢谢楼上各位.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 12:20 , Processed in 0.392212 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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