找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2030|回复: 25

[原创]:[蜜蜂软体]:排序函数:能根据X、Y条件对坐标表进行各种排序!(源代码哟)

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2003-8-15 13:29:16 | 显示全部楼层 |阅读模式

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

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

×
能进行坐标点的排序!
你是想进行先X从上到下后Y从左到右
或是先X从下到上后Y从右到左
或是。。。。。。。。。。。。。。。
哈哈。。。。
通吃!!!!!
我吃。。。
我吃。。。。。。。。。。。。。。
。。。。。。。。。。。。。

调用:(NetBee_px slist (list 1 < >))
其中slist:((x y)(x y)(x y).........)
后面一个条件表,只能用list生成

---------------------------------------------------------------------------------
该函数是根据《明经通道》上的函数库中领悟而得
在此向明经通道致谢!!!!!!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-10-17 14:07:06 | 显示全部楼层
不错,居然想得到用传递函数入口地址的方法
绝了!
让我想到了一句话:只有想不到,没有做不到

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

使用道具 举报

发表于 2003-10-17 14:16:15 | 显示全部楼层
(list 1 < >)

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

使用道具 举报

发表于 2003-10-17 14:53:56 | 显示全部楼层 |阅读模式

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

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

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

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2003-10-17 15:52:04 | 显示全部楼层
就是在调用函数时,函数接受两个参数
其中第一个参数为待排序的坐标表
 如:((x y)(x y)(x y)......)
      或
      ((x y z)(x y z)......)
       或
      ((x y z .....其它子项)(x y z .....其它子项).........)
第二个参数就是排序方式表了:
  它在函数内部是一个三元表(1 > <)或(0 > >)等之类的。这里的大于小于符号不是字符,而是CAD的内部保护比较命令。
  所以调用函数时,这个三元表的生成必须用LIST来生成,这样传递到函数内部的值才是一个函数而不是符号!
    比如:当执行(setq test1   '<')
     后  test1='<'
             而执行
               (setq test2  >)
     后test2的值为大于命令,可以用test2来取代大于命令进行运行:  
      (test2 3 4)
      返回值为假!

这样在调用函数时,你只需根据你排序的要求,对坐标点进行平面上的排序了
   如:
   假设slist=((5 8) (5 6)(6 8)...........)
         而我们想对它进行从左到右、从上到下的排序则:
      X方向从小到大
      Y方向从大到小
      而且X优先
      所以
   (setq slist(netbee_pc slist (list 0 < >)))
     
  注:这里(list 0 < >)中
        0为X、Y的优先级;
        <为X的排序模式
        >为Y的排序模式
    详细说明见函数文件内部
-------------------------------------------------------------------
   这个函数是很实用的,它包含了很多种组合,你不用再根据每次排序的需要不同而重新定义了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-20 11:27:11 | 显示全部楼层
很好啊!

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2003-10-27 12:42:26 | 显示全部楼层
要是加入针对不同方向的排序,则要加入方位角,而且在函数内部还要有一个坐标转换函数,这样速度就会慢下来,所以这道工作最好在函数处部处理完成后再传递。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-10-27 20:53:13 | 显示全部楼层

  1. (defun Sort_and_Write_pList (fname plist / fp pt)
  2.   ;; sort plist first
  3.   (setq        plist (vl-sort plist
  4.                        '(lambda        (p1 p2)
  5.                           (cond        ((< (car p1) (car p2)) T)
  6.                                 ((and (= (car p1) (car p2))
  7.                                       (< (cadr p1) (cadr p2))
  8.                                  )
  9.                                  T
  10.                                 )
  11.                                 ((and (= (car p1) (car p2))
  12.                                       (= (cadr p1) (cadr p2))
  13.                                       (< (caddr p1) (caddr p2))
  14.                                  )
  15.                                  T
  16.                                 )
  17.                                 (T nil)
  18.                           )
  19.                         )
  20.               )
  21.   )
  22.   ;; write plist then
  23.   (setq fp (open fname "w"))
  24.   (foreach pt plist (princ pt fp) (princ "\n" fp))
  25.   (close fp)
  26. )

  27. ;;; 测试上述函数
  28. (Sort_and_Write_pList
  29.   "c:/test.txt"
  30.   '((1 3 4)
  31.     (2 4 5)
  32.     (3 4 5)
  33.     (1 3 2)
  34.     (3 5 2)
  35.     (2 4 0)
  36.     (1 2 3)
  37.     (1 2 0)
  38.     (1 1 0)
  39.    )
  40. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-30 19:27:07 | 显示全部楼层
我正在研究,
排序对CAD来说很有用,我经常就用过排序,可是很次排的方式都不一样,很难找到一个全面的函数来!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-30 19:34:01 | 显示全部楼层
lsp本身就提供了排序函数,参见vl-sort函数,根据要求作以下前处理就可以用了。
下面是一个对多个字符合并成一个字符的例子,就需要对多个字符的x或y坐标排序,有兴趣的可下载一式。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-1 08:19:24 | 显示全部楼层
这个主题很有意义~
自己也写了一些排序的程序效率不是很高~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

发表于 2004-4-10 03:33:10 | 显示全部楼层
在明经有一个排序程序,和你的很相像(我还没下载你的),不知道你和他。。。呵呵(名字一样啊,知道了)
我没有对x,y排序的程序。因为从一开始,我就是从对多维排序入手的。。。。:)
仅仅对x,y排序通用性差点,要玩就玩通用的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-10 10:29:37 | 显示全部楼层
为什么要钱呀!
我想用vl-sort可以很好的排序呀!
(defun myvl-sort (a b c);a是表 表中元子内的第几项   c 排序方式
(if (> (length a) 1)
      (progn
         (if (= c "<")
            (setq a (vl-sort a (function (lambda (e1 e2) (< (nth (- b 1) e1) (nth (- b 1) e2))))))
            (setq a (vl-sort a (function (lambda (e1 e2) (> (nth (- b 1) e1) (nth (- b 1) e2))))))
         )
      )
   )
   (setq a a)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 16:37 , Processed in 0.232308 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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