最后进行一下表处理都不会吗?我的结果是11 12 13 14 ... 21 22 23 24 ... ...)你要的结果(11 12 13 14 ...) (21 22 23 24...) ...)你只要将我的表再遍历一次,过程中跟踪X坐标,如果X坐标发生变化,则重新组表...因为按我说的排列后的对象已经是按顺序一次排好的,所以你需要的在一个子表中的内容是连续的,你不需要判断X坐标是多少,只需要判断有没有变化,有变化后把程序给你写了,你仔细看看吧...(defun com(e1 e2 f p)
(cond
((= f '=) (if (equal e1 e2 p) t nil))
(t (if (equal e1 e2 p) nil ((eval f) e1 e2)))
)
);如有错误,用上面的函数代替> < 和=,这个函数允许一定精度控制;用法(com 300.3 300 '> 0.5),返回nil- (defun c:test( / ss ssl i n el el2 elt x)
- (setq ss (ssget '((0 . "TEXT"))))
- (SETQ SSL (SSLENGTH SS) N 0)
- (setq el '()
- n 0
- )
- (while (< n ssl)
- (setq e (ssname ss n))
- (setq el (append el (list e)))
- (setq n (+ n 1))
- )
- (setq el (vl-sort el '(lambda (e1 e2) (< (caddr (assoc 10 (entget e1)))
- (caddr (assoc 10 (entget e2)))))))
- (setq el (vl-sort el '(lambda (e1 e2) (< (cadr (assoc 10 (entget e1)))
- (cadr (assoc 10 (entget e2)))))))
- (setq i 0 elt nil el2 nil x nil)
- (repeat (length el)
- (setq e (nth i el))
- (if (equal x (cadr (assoc 10 (entget e))) 0.001)
- (setq elt (append elt (list e)))
- (progn
- (if elt (setq el2 (append el2 (list elt))))
- (setq elt (list e)
- x (cadr (assoc 10 (entget e))))
- )
- )
- (setq i (1+ i))
- )
- (setq el2 (append el2 (list elt)))
- )
|