本帖最后由 jun470 于 2023-11-4 14:38 编辑
小弟我是个新手,也没系统学习过lisp,不过论坛中有很多帖子给我自己研究提供了很大的帮助,感谢论坛中格纹大佬了!!! 我在论坛搜索 ” vl-sort-i “ 相关的帖子,没找到相关的,所以冒昧开个帖子讨论下,望大佬不吝赐教,感谢了! 现在我遇到的情况是这样,下面这段代码是框选文字之后,对文字的Y坐标进行排序,输出索引表。上传的附件中,我执行后,应当输出(2 0 3 1 4),但是实际输出的是(1 3 0 2 4),看了好几天了,没找到问题所在,代码简短,但是就是不对,欢迎大佬指正。
- (defun c:Q ( / ss k nlt ssN ptC yyj n1 e1 e2)
- (vl-load-com)
- (setq ss (ssget (list (cons 0 "text"))));;;框选建立选择集
- (setq K 0)
- (setq nlt (sslength ss));选择集个数
- (repeat nlt
- (setq ssN (ssname ss K));获取图元号
- (setq ptC (cdr (assoc 10 (entget ssN))) );获取坐标
- (print (cadr ptC));输出Y
- (setq yyj (append yyj (list ptC)));坐标集合
- (setq K (+ K 1))
- )
-
- (print yyj);;输出 坐标合集表
-
- (setq n1 (vl-sort-i yyj
- (function (lambda (e1 e2)
- (< (cadr e1) (cadr e2)) ) ) ));以Y排序的索引表,如(0 1 2)
- (print n1);输出索引表,实际输出不对
- (princ))
|