混合选择集的坐标提起lisp_晓东CAD家园-论坛-A/VLISP-[LISP程序]:请教如何对选择集进行排序-我有(setq ss(ssget "_w" p0 p1 (list (0 . "CIRC...

;;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

)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值