(defun cy_px_zbstb ;;(cy_pz_zbstb zbstb k)■k=0先x后y,=1先y后x,完全相同的不消掉 (zbstb k / IN K K1 KF N X ZB0 ZB1 ZBSTB1 ZBSTB2 ZBSTB3 ZBSTB4) ;;k=0先x后y,=1先y后x,,完全相同的不消掉 (setq zbstb1(cy_px_zbstb0 zbstb k) k1 nil kf(if (= k 0) 1 0);;相反的k叫kf zb0(nth 0 zbstb1) zbstb1(cdr zbstb1) zbstb2 '() zbstb3 (list zb0) n(length zbstb1) in 0) (repeat n (setq zb1(nth in zbstb1) in(1+ in)) (if (equal (nth k zb0) (nth k zb1) 0.000001);;说明第一个相等 (setq zbstb3(append zbstb3 (list zb1))) (setq zbstb2(append zbstb2 (list zbstb3)) zbstb3(list zb1) zb0 zb1) ) ) (setq zbstb2(append zbstb2 (list zbstb3)) zbstb4(mapcar '(lambda (x) (cy_px_zbstb0 x kf)) zbstb2)) ) (defun cy_px_zbstb0 (zbstb k / K N ZBSTB5);;(cy_px_zbstb0 zbstb k)■针对表内子元素的个数返回排序 (setq n(length zbstb)) (cond ((= n 0) (setq zbstb5 '())) ((= n 1) (setq zbstb5 zbstb)) (t (setq zbstb5 (vl-sort zbstb (function (lambda (e1 e2) (< (nth k e1) (nth k e2))))))) ) zbstb5 )
;;;(setq zbstb '((0 0 "a") (1 1 "b" )(0 3 "c") (-1 1 "d")(1 1 "b" ))) ;;;(cy_pz_zbstb zbstb 1);;坐标实体按先y再x的顺序排;从上往下排序 ;;;(cy_pz_zbstb zbstb 0);;坐标实体按先x再y的顺序排;从左往右排序
“a”"b""c"可以是实体名,就是你把((坐标x1 坐标y1 实体名1)((坐标x2 坐标y2 实体名2)....)这样的表的排序,可以用于已经有的实体的排序更新; 你这个是按点排序,简单一些,((坐标x1 坐标y1)((坐标x2 坐标y2)....)即可,按点逐个生成text。 |