;;autocadr14时使用的
;;sszwd:((x y) (x y).......)
;;;给表sszwd根据从左到右,从上到下的规则排序(插入法).
(defun zbh_px2
(sszwd / sstmp1 sstmp2 loop_i loop_j pt1x pt1y pt2x pt2y sslen)
;;定义内部函数
(defun listij_in ()
(setq
sszwd (append
(reverse (cdr (member sstmp1 (reverse sszwd))))
(list sstmp2)
(member sstmp1
(reverse (cdr (member sstmp2 (reverse sszwd))))
)
(cdr (member sstmp2 sszwd))
)
)
)
(setq loop_j 1
sslen (LENGTH sszwd))
(while (< loop_j sslen)
(setq sstmp2 (nth loop_j sszwd)
pt2x (car sstmp2)
pt2y (cadr sstmp2)
loop_i 0
)
(while
(progn
(setq sstmp1 (nth loop_i sszwd)
pt1x (car sstmp1)
pt1y (cadr sstmp1)
) ;_结束setq
(cond
;;若指针i已经到了指针j的位置则跳出
((= loop_i loop_j)
(not 1)
)
;;若第二点的Y比第一点的大,则把第二点插入到第一前
;;并跳出
((< pt1y pt2y)
(listij_in)
(not 1)
)
;;_若第一点的Y与第二点的Y相等,且第二点的X比第一点的小,
;;则把第二点插入到第一点前,并跳出
((and (= pt1y pt2y) (> pt1x pt2x))
(listij_in)
(not 1)
)
;;其他情况则不进行互换
(t
(setq loop_i (1+ loop_i))
)
) ;_结束cond
)
) ;_结束while
(setq loop_j (1+ loop_j))
) ;_结束while
sszwd
)