lisp 圆心x,y坐标排序问题
本帖最后由 樱木花道2 于 2013-11-11 15:52 编辑如题,lisp如何实现图中的排序? 按照以前前辈的代码生成的标号是这样的,如何改才能满足条件
取一个对象,其它对象与它的的夹角小于某一误差的参与排序,排序以距离来排序。 本帖最后由 樱木花道2 于 2013-11-12 13:39 编辑
自贡黄明儒 发表于 2013-11-11 16:15 http://bbs.mjtd.com/static/image/common/back.gif
取一个对象,其它对象与它的的夹角小于某一误差的参与排序,排序以距离来排序。
(defun c:tt ()
(princ "\n请选择要排序的实体...")
(setq bl1 (getpoint))
(setq bl2 (getpoint))
(if (setq ss (ssget))
(progn
;; 1、获取点位表
(setq lst '()
i 0
)
(repeat (sslength ss)
(setq en(ssname ss i)
ent (entget en)
pt(cdr (assoc 10 ent))
lst (cons pt lst)
i (1+ i)
)
)
;; 2、排序
(setq
lst (vl-sort
lst
(function
(lambda (e1 e2)
(if (equal (angle bl1 bl2) (angle e1 e2) 1e-1)
(< (cadr e1) (cadr e2))
(< (car e1) (car e2))
)
)
)
)
)
;; 3、写序号文字
(setq i 1)
(foreach pt lst
(command "_.text" "j" "mc""non"pt (getvar "TEXTSIZE") 0 (itoa i))
(setq i (1+ i))
)
)
)
(princ)
)
前辈帮我看看有什么问题,还是出不来 1.如果想直接用大神们弄好的排序程序,你可以把你的图先旋转水平方向排列,让它排好序编完号后再旋转回去
2.另外如果你的圆是按你要排序的顺序绘制的,可以不用排序,直接SSGET后小小处理一下直接进行编号
3.如果以上两个办法都不可行,那只能自己编写排序函数 llsheng_73 发表于 2013-11-13 16:56 static/image/common/back.gif
1.如果想直接用大神们弄好的排序程序,你可以把你的图先旋转水平方向排列,让它排好序编完号后再旋转回去
...
恩,请教一个问题,上面程序中(progn (<(car e1) (car e2)) (setq dd 1)) 后与(<(car e1) (car e2)生成的排序不一样,这是为什么? 按照两位前辈的指点,问题已解决
页:
[1]