|
发表于 2003-8-12 19:47:00
|
显示全部楼层
漏說了一點,上面的程序有用到 vl-sort 函數,幫助文件的說明如下:
將串列中的元素依給定的比較函數排序
(vl-sort list comparison-function)
引數
list
任意串列。
comparison-function
比較函數。如果排序順序第一個引數在第二個之前,這可以為任意接受兩個引數並傳回 T (或任意非 nil 值) 的函數。
comparison-function 的值可以為下列格式之一:
符號 (函數名稱)
'(LAMBDA (A1 A2) ...)
(FUNCTION (LAMBDA (A1 A2) ...))
傳回值
含有 list 的元素,由 comparison-function 指定順序的串列。重覆元素可能會自串列中刪除。
範例
排序數字串列:
_$ (vl-sort '(3 2 1 3) '"))
(if (= T_HIGH "")
(setq T_HIGH T_HIG)
(setq T_HIGH (atof T_HIGH))
)
(setq P2 (getpoint "\n指定基准点:"))
(setq P3 '(0 0))
(if (= P2 NIL)
(setq P2 P3)
)
(setq X_P2 (car P2))
(setq Y_P2 (nth 1 P2))
(setq SS (ssget '((0 . "CIRCLE"))))
(setq COUNT 0
N 0
)
(setq R_LIST NIL)
(setq X_LIST NIL)
(setq Y_LIST NIL)
(repeat (sslength SS)
(setq EN (ssname SS N))
(setq ED (entget EN))
(if (not (member
(setq CEN (cdr (assoc 10 ED)))
CEN_LIST
)
)
(progn
(setq CEN_LIST (append CEN_LIST (list CEN)))
(setq CEN_X (list (car CEN)))
(setq CEN_Y (list (cadr CEN)))
(setq TMP (cdr (assoc 40 ED)))
(setq R_LIST (cons (list TMP COUNT) R_LIST))
(setq X_LIST (cons CEN_X X_LIST))
(setq Y_LIST (cons CEN_Y Y_LIST))
(setq COUNT (1+ COUNT))
(setq NOU (itoa COUNT))
(command "_.text" "j" "C" CEN T_HIGH "" NOU)
)
)
(setq N (1+ N))
)
(setq X_LIST (reverse X_LIST))
(setq Y_LIST (reverse Y_LIST))
(setq P1 (getpoint "\ninsert point"))
(setq R_LIST (vl-sort R_LIST
(function (lambda (E1 E2)
(< (cadr E1) (cadr E2))
)
)
)
)
(WRITE_LIST R_LIST)
(WRITE_LINE)
(command "_.UCS" "rev")
(command "_.UNDO" "end")
(setvar "cmdecho" CM)
(setq *ERROR* OLD_ERROR)
(princ)
) |
|