1. ;;说明:根据给定符号对图元表进行XY轴位置先后排序(如:先X轴升序,后Y轴降序)
    2. ;;参数:lst:图元表
    3. ;;参数:XSymbol:X轴升降序符号:<、>
    4. ;;参数:YSymbol:Y轴升降序符号:<、>
    5. ;;参数:isxfirst:是否先对X轴排序
    6. ;;返回:排序后的图元表!(setq hlst (SortLineByXAndY lshlst < > nil))
    7. (defun SortLineByXAndY(lst XSymbol YSymbol isxfirst / hvlst lslst rowcol symbol ud xory xy)
    8. (if isxfirst
    9. (setq
    10. XOrY cadr;;设置第一次依据排序坐标和第二次依据X轴位置比对
    11. ud caddr;;设置第二次根据Y坐标进行排序
    12. Symbol YSymbol;;设置第二次排序的升降序
    13. lslst (vl-sort lst (function (lambda (x y) (XSymbol (XOrY (assoc 10 (entget x))) (XOrY (assoc 10 (entget y)))))));;先对表进行X轴排序
    14. )
    15. (setq
    16. XOrY caddr;;设置第一次依据排序坐标和第二次依据Y轴位置比对
    17. ud cadr;;设置第二次根据X坐标进行排序
    18. Symbol XSymbol;;设置第二次排序的升降序
    19. lslst (vl-sort lst (function (lambda (x y) (YSymbol (XOrY (assoc 10 (entget x))) (XOrY (assoc 10 (entget y)))))))
    20. )
    21. )
    22. (setq rowcol nil xy (XOrY (assoc 10 (entget (nth 0 lslst)))) hvlst nil)
    23. (foreach x lslst
    24. (if (= xy (XOrY (assoc 10 (entget x))))
    25. (setq rowcol (cons x rowcol))
    26. (setq
    27. hvlst (append hvlst (vl-sort rowcol (function (lambda (x y) (Symbol (ud (assoc 10 (entget x))) (ud (assoc 10 (entget y))))))))
    28. rowcol nil rowcol (cons x rowcol) xy (XOrY (assoc 10 (entget x)))
    29. )
    30. )
    31. )
    32. (setq hvlst (append hvlst (vl-sort rowcol (function (lambda (x y) (Symbol (ud (assoc 10 (entget x))) (ud (assoc 10 (entget y)))))))))
    33. hvlst
    34. )

    QQ图片20201123151057.png
    这是对这组线条中的水平线排序后的的顺序