本帖最后由 e2002 于 2023-12-11 15:56 编辑
当初写批量创建 Layouts 工具的时候,也是需要这么个 左右上下 共8种排序方式(实际上是4种,另外四种是其他4种的倒序而已),为了简化代码,所以用了一点办法。大家共同学习提高,代码没有任何限制没有任何保证(包括商用),完全公开,无币可下载:
- ;; 边界列表的2次排序函数
- (defun _lkpt_Layout_CreateByTitleBlocks_Sort ( / i1 sym1 i2 sym2 l_sort u v lReturn)
- (cond
- ( (= sSort "1") (setq i1 1 sym1 '> i2 0 sym2 '<) );;左到右,上到下
- ( (= sSort "2") (setq i1 1 sym1 '< i2 0 sym2 '<) );;左到右,下到上
- ( (= sSort "3") (setq i1 1 sym1 '> i2 0 sym2 '>) );;右到左,上到下
- ( (= sSort "4") (setq i1 1 sym1 '< i2 0 sym2 '>) );;右到左,下到上
- ( (= sSort "5") (setq i1 0 sym1 '< i2 1 sym2 '>) );;上到下,左到右
- ( (= sSort "6") (setq i1 0 sym1 '> i2 1 sym2 '>) );;上到下,右到左
- ( (= sSort "7") (setq i1 0 sym1 '< i2 1 sym2 '<) );;下到上,左到右
- ( (= sSort "8") (setq i1 0 sym1 '> i2 1 sym2 '<) );;下到上,右到左
- );_cond
- (setq l_sort (vl-sort lBoundarys (function (lambda (u v) ((vl-symbol-value sym1) (nth i1 (car u)) (nth i1 (car v)))))) );_第一次排序
- (setq l_sort (vl-sort l_sort (function (lambda (u v)
- (if (< (abs (- (nth i1 (car u)) (nth i1 (car v)))) rFuzzy)
- ((vl-symbol-value sym2) (nth i2 (car u)) (nth i2 (car v)))
- nil
- );_fi
- );_lam
- );_fun
- )
- );_第二次排序
- (setq lReturn l_sort)
- );_defun _lkpt_Layout_CreateByTitleBlocks_Sort
|