本帖最后由 Gu_xl 于 2011-10-14 20:44 编辑
没有排不了序的坐标,给你个万能坐标排序函数!
 - ;|功能:对2d,3d点表排序.
- 用法:(sort-pt 点表 str)
- 如:(sort-pt plst "x")
- 说明:str可以 XYZxyz 6个字的任意组合.
- 大写为从大到小排列,小写为从小到大排列.
- 字符前后说明优先级别的大小,级别大的优先考虑。
- 例如:按坐标x从小到大,y从大到小排序,即坐标按从左到右,从上到下排序, (sort-pt Plist "xY")
- |;
- ;;; (sort-pt 点表 控制字串 ) 对2d,3d点表排序任意排序,字串"xyz"大小写控制,
- ;;;大写为从大到小排列,小写为从小到大排列.
- (defun sort-pt (plst xyz / fun sort-pt-1)
- (defun sort-pt-1 (plts fun n)
- (vl-sort plts
- '(lambda (a b)
- (fun (nth n a) (nth n b))
- ) ;_ 结束lambda
- ) ;_ 结束vl-sort
- ) ;_ 结束defun
- (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
- (setq fun <
- n-xyz (- n-xyz 120)
- plst (sort-pt-1 plst fun n-xyz)
- ) ;_ 结束setq
- ) ;_ 结束if
- ) ;_ 结束foreach
- ) ;_ 结束defun
|