找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3217|回复: 5

[LISP函数]:点集按Pl起点到终点排序

[复制链接]

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-2-14 12:57:53 | 显示全部楼层 |阅读模式

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

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

×

  1.   [FONT=courier new]
  2. ;;点集按Pl起点到终点排序,返回(pline实体 排序后的点表)
  3. ;;参数 pl --- pline 实体或Object,pts ---- 点集
  4. ;;其实 pl 可以是任何 Curve
  5. ;;by Eachy
  6. (defun xdl-pts-sortonpl        (pl pts)
  7.   (setq        pts (mapcar
  8.               '(lambda (x)
  9.                  (list (vlax-curve-getdistatpoint
  10.                          pl
  11.                          (vlax-curve-getclosestpointto pl x)
  12.                        )
  13.                        x
  14.                  )
  15.                )
  16.               pts
  17.             )
  18.         pts (vl-sort pts
  19.                      '(lambda (e1 e2)
  20.                         (< (car e1) (car e2))
  21.                       )
  22.             )
  23.   )
  24.   (list        pl
  25.         (mapcar
  26.           'cadr
  27.           pts
  28.         )
  29.   )
  30. )
  31.   [/FONT]

评分

参与人数 1D豆 +2 收起 理由
ScmTools + 2 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-3-16 17:34:05 | 显示全部楼层
论坛上有的是用vlax-curve-getdistatpoint函数计算距离,有的地方用vlax-curve-getParamAtDist计算,这两个函数有什么不同呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

发表于 2013-6-2 20:42:15 | 显示全部楼层
能给个实例吗。

我按照你的来没有实现
(vl-load-com)
;;点集按Pl起点到终点排序,返回(pline实体 排序后的点表)
;;参数 pl --- pline 实体或Object,pts ---- 点集
;;其实 pl 可以是任何 Curve
;;by Eachy
(defun xdl-pts-sortonpl (pl pts)
  (setq pts (mapcar
       '(lambda (x)
   (list (vlax-curve-getdistatpoint
    pl
    (vlax-curve-getclosestpointto pl x)
         )
         x
   )
        )
       pts
     )
pts (vl-sort pts
       '(lambda (e1 e2)
   (< (car e1) (car e2))
        )
     )
  )
  (list pl
(mapcar
   'cadr
   pts
)
  )
)
;;;=============================================================
;;;测试
(defun C:hdm (/ S1 S2 I SIZE)
  (setq en (entsel "选择一条直线:"))
  (setq size 0)
  (SETQ S1 (ssget '((0 . "POINT"))))
  (SETQ n 0)
  (repeat (sslength s1)
    (setq lst (cons (ssname s1 n) lst)
   n   (1+ n)
    )
  )

  (setq
    x (mapcar '(lambda (x) (car (cdr (assoc 10 (entget x))))) lst)
  )
  (setq
    y (mapcar '(lambda (x) (cadr (cdr (assoc 10 (entget x)))))
       lst
      )
  )
  (setq maxx (eval (cons 'max x))
minx (eval (cons 'min x))
  )
  (setq maxy (eval (cons 'max y))
miny (eval (cons 'min y))
  )
  (setq dx (- maxx minx)
dy (- maxy miny)
  )
  ;;排序:
  (setq S2 (xdl-pts-sortonpl en lst))
  (progn
    (setq I 0)
    (repeat (sslength S2)
      (setq pen_data (entget (ssname s2 i)))
      (setq ppt (assoc 10 pen_data))
      (setq pp (cdr ppt))
      (setq Perpt (vlax-curve-getClosestPointTo (car en) pp T))
     ;找出垂点
      (entmake (APPEND '((0 . "LINE")
    (100 . "AcDbEntity")
    (100 . "AcDbLine")
    (8 . "0")
   )
         (LIST (CONS 10 pp) (CONS 11 perpt))
        )
      )
      (princ "\n")
      (princ (cdddr (assoc 10 (entget (ssname S2 I)))))
     ;显示排序结果。
      (setq I (1+ I))
    )
  )
  (princ)
)


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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 06:52 , Processed in 0.253771 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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