排序
<font color="#006600">求助:按s形顺序提取点坐标程序,如图</font> 有高手出来帮助下 不知你要在保存之前排序,还是在保存后重新排列? 保存之前排序,先排序,再写入文件 顶一下 本帖最后由 作者 于 2009-11-26 0:40:19 编辑以下程序是对含整数子列表的列表的排序(按照子列表第一单元从小到大),具体到你的程序中可做些修改
(defun vl-sort-list (lst / index_lst e1 e2 lst1)
(setq index_lst (vl-sort-i lst
(function (lambda (e1 e2)
(< (car e1) (car e2))
)
)
)
)
(setq lst1 '())
(foreach item index_lst
(setq lst1 (cons (nth item lst) lst1))
)
(reverse lst1)
)
(setq lst (vl-sort-list'((1 3 2 3) (3 2 3 5) (2 1 2 3)))) <p>请教<strong><font face="Verdana" color="#61b713">xianaihua,也是排序问题, 见附件图,左边的图,想变成右边的效果,谢谢</font></strong></p><p> </p> <strong><font face="Verdana" color="#61b713">luyu9635:不明白你的意思。是标号排序还是,图形变换?</font></strong> <p>此排序不是单纯x或y排序,有些类似最短路径,由起点找下一点</p> <p>为007编一个</p><p>(defun c:ttt ( / ss pt ss1 out n fid x y h)<br/>(if (and (setq ss (ssget '((0 . "CIRCLE"))))<br/> (setq pt (getpoint "起点:"))<br/> (setq h (getdist pt "文字高度:"))<br/> )<br/> (progn<br/> (setq ss1 nil out nil)<br/> (setq n -1)<br/> (repeat (sslength ss) (setq ss1 (cons (ssname ss (setq n (+ n 1)) ) ss1))) <br/> (setq ss1 (mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) ss1))<br/> <br/> (setq out (list (cons 0 pt)) n 0) <br/> (while ss1<br/> (setq ss1 (vl-sort ss1 '(lambda (x y) (< (distance (cdr (car out)) (list (car x)(cadr x) 0))<br/> (distance (cdr (car out)) (list (car y)(cadr y) 0)))))<br/> out (cons (cons (setq n (+ n 1)) (car ss1)) out)<br/> ss1 (cdr ss1)<br/> ) )<br/> (setq out (cdr (reverse out)))<br/> (setq fid (open "c:\\test.txt" "w"))<br/> (foreach x out<br/> (entmake (list '(0 . "TEXT") (cons 10 (cdr x)) (cons 1 (itoa (car x))) (cons 40 h)))<br/> (write-line (strcat (itoa (car x)) "," (rtos (cadr x) 2 3) "," (rtos (caddr x) 2 3) "," (rtos (cadddr x) 2 3)) fid)<br/> )<br/> (close fid)<br/>) )<br/>)</p>