找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: fsxm

[原创] 将点的排序进行到底!功能全面的通用点表排序函数!更新:(加入容差功能)

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

发表于 2006-6-19 21:16:01 | 显示全部楼层
容差设置值该怎样设定呢?
如下面这样的一组串列
(setq lst '((547.5 5142.04 0.0)(487.5 5142.04 0.0)(427.5 5142.04 0.0)(154.167 5142.04 0.0)
            (94.1667 5142.04 0.0)(37.9167 5142.04 0.0)(351.25 5142.04 0.0)(294.583 5142.04 0.0)
            (234.167 5142.04 0.0)(547.5 5062.04 0.0)(487.917 5062.04 0.0)(427.083 5062.04 0.0)
            (154.583 5062.04 0.0)(93.75 5062.04 0.0)(34.1667 5062.04 0.0)(347.5 5062.04 0.0)
            (287.5 5062.04 0.0)(234.167 5062.04 0.0)))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

 楼主| 发表于 2006-6-25 09:04:42 | 显示全部楼层
容差设置值主要是对具体情况而言的不是所有的都是一样啦!!
比如在对文字位置点排序时可以用字高一半为容差,
这样就可以屏蔽掉一些坐标偏离造成的影响。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-1-21 19:33:59 | 显示全部楼层
§fsxm∮,想得好啊,请问:比如我有一个点表,排序条件如下:按Y坐标大者排在前面,若Y等,则以X小者排在前面,怎么排列?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-10-3 09:35:11 | 显示全部楼层
最初由 fsxm 发布
[B]有了老大们的支持我只好努力再努力了哦!!
在明经看到了加入误差的2D排序!受到启发!
将上面的sort-pt-1子程式改了一下:
[php](defun sort-pt-1 (plst fun n fuzz)
  (vl-sort plst
           '(lambda (a b)
          ... [/B]

感觉有些问题?测试:
$
_$ lst
((-9100.0 4430.0 0.0) (-3260.0 4430.0 0.0) (869.504 8559.5 0.0) (869.504 14399.5 0.0) (-3260.0 18529.0 0.0) (-9100.0 18529.0 0.0) (-13229.5 14399.5 0.0) (-13229.5 8559.5 0.0) (-9100.0 4430.0 0.0))
_$ (SORT-PT lst "xy" 0)
((-13229.5 14399.5 0.0) (-13229.5 8559.5 0.0) (-9100.0 4430.0 0.0) (-9100.0 4430.0 0.0) (-9100.0 18529.0 0.0) (-3260.0 4430.0 0.0) (-3260.0 18529.0 0.0) (869.504 8559.5 0.0) (869.504 14399.5 0.0))
_$ (SORT-PT lst "xyz" 0)
((-13229.5 14399.5 0.0) (-13229.5 8559.5 0.0) (-9100.0 4430.0 0.0) (-9100.0 4430.0 0.0) (-9100.0 18529.0 0.0) (-3260.0 4430.0 0.0) (-3260.0 18529.0 0.0) (869.504 8559.5 0.0) (869.504 14399.5 0.0))
_$
_$ (SORT-PT lst "xY" 0)
((-13229.5 14399.5 0.0) (-13229.5 8559.5 0.0) (-9100.0 4430.0 0.0) (-9100.0 4430.0 0.0) (-9100.0 18529.0 0.0) (-3260.0 4430.0 0.0) (-3260.0 18529.0 0.0) (869.504 8559.5 0.0) (869.504 14399.5 0.0))
_$ (SORT-PT lst "XY" 0)
((869.504 14399.5 0.0) (869.504 8559.5 0.0) (-3260.0 18529.0 0.0) (-3260.0 4430.0 0.0) (-9100.0 18529.0 0.0) (-9100.0 4430.0 0.0) (-9100.0 4430.0 0.0) (-13229.5 8559.5 0.0) (-13229.5 14399.5 0.0))
_$ (SORT-PT lst "Xy" 0)
((869.504 14399.5 0.0) (869.504 8559.5 0.0) (-3260.0 18529.0 0.0) (-3260.0 4430.0 0.0) (-9100.0 18529.0 0.0) (-9100.0 4430.0 0.0) (-9100.0 4430.0 0.0) (-13229.5 8559.5 0.0) (-13229.5 14399.5 0.0))
_$
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-10-7 15:01:35 | 显示全部楼层
选择集按照给定的组码值进行排序:
http://zml84.blog.sohu.com/64213673.html
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2009-2-17 19:59:18 | 显示全部楼层
  1. [FONT=courier new];; 点集排序连线
  2. (defun c:tt ()
  3.   (CMDLA0)
  4.   (xyp-initSet '(INT) '(5))
  5.   (SETQ INT (UINT 7 "" "排序码(1~8)" INT))
  6.   (if (setq ss (ssget '((0 . "point"))))
  7.     (progn
  8.       (setq aa        (xyp-Sort-Plist (xyp-Sort ss 10 "Y-max") int)
  9.             ptn        '()
  10.       )
  11.       (foreach a aa
  12.         (setq ptn (cons (car a) ptn))
  13.       )
  14.       (xyp-Entmake-lwPolyline ptn nil)
  15.     )
  16.   )
  17.   (CMDLA1)
  18. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-2-18 13:18:31 | 显示全部楼层
楼主,
我想将表内单个元素进行排序,行吗?
(LIST 101  401  201   102A  305  601 102)
要求结果是 101 102 102A 201 305 401 601
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 188个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

发表于 2013-6-2 10:22:57 | 显示全部楼层
你好,按照你的我做了段代码,怎么提示参数错误:

(defun sort-pt-1 (plts fun n)

  (vl-sort plts

           '(lambda (a b)

              (fun (nth n a) (nth n b))

            )

  )

)

(defun sort-pt (plst xyz / fun)

  (setq xyz (vl-string->list xyz))

  (foreach n-xyz (reverse xyz)

    (if        (< n-xyz 100)

      (setq fun          >

            n-xyz (- n-xyz 88)

            plst  (sort-pt-1 plst fun n-xyz)

      )

      (setq fun          <

            n-xyz (- n-xyz 120)

            plst  (sort-pt-1 plst fun n-xyz)

      )

    )

  )

)


                                        ;-------------------------------------------------
(defun C:hdm (/ S1 S2 I)
  (setq en (entsel "选择一条直线:"))
                                        ;(setq size 0.1)
  (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)
  )
  (if (> dx dy)
    ;;x坐标排序:
    (setq S2 (sort-pt-1 s1 "x" n))
    ;;y坐标排序:
    (setq S2 (sort-pt-1 s1 "y" n))
  )
  (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)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 19:49 , Processed in 0.427720 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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