明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2430|回复: 6

[提问] lisp 圆心x,y坐标排序问题

[复制链接]
发表于 2013-11-11 15:46:46 | 显示全部楼层 |阅读模式
本帖最后由 樱木花道2 于 2013-11-11 15:52 编辑

如题,lisp如何实现图中的排序?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2013-11-11 15:50:24 | 显示全部楼层
按照以前前辈的代码生成的标号是这样的,如何改才能满足条件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

应该把样图放上来,这些是否在ucs下看起来倾斜,或者倾斜在wcs下是定值,倾角有什么限制?  发表于 2013-11-14 08:30
发表于 2013-11-11 16:15:32 | 显示全部楼层
取一个对象,其它对象与它的的夹角小于某一误差的参与排序,排序以距离来排序。
 楼主| 发表于 2013-11-12 10:17:19 | 显示全部楼层
本帖最后由 樱木花道2 于 2013-11-12 13:39 编辑
自贡黄明儒 发表于 2013-11-11 16:15
取一个对象,其它对象与它的的夹角小于某一误差的参与排序,排序以距离来排序。

(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)
)
前辈帮我看看有什么问题,还是出不来
发表于 2013-11-13 16:56:02 | 显示全部楼层
1.如果想直接用大神们弄好的排序程序,你可以把你的图先旋转水平方向排列,让它排好序编完号后再旋转回去

2.另外如果你的圆是按你要排序的顺序绘制的,可以不用排序,直接SSGET后小小处理一下直接进行编号

3.如果以上两个办法都不可行,那只能自己编写排序函数
 楼主| 发表于 2013-11-14 08:04:01 | 显示全部楼层
llsheng_73 发表于 2013-11-13 16:56
1.如果想直接用大神们弄好的排序程序,你可以把你的图先旋转水平方向排列,让它排好序编完号后再旋转回去
...

恩,请教一个问题,上面程序中(progn (<(car e1) (car e2)) (setq dd 1)) 后与(<(car e1) (car e2)生成的排序不一样,这是为什么?
 楼主| 发表于 2013-11-14 14:18:04 | 显示全部楼层
按照两位前辈的指点,问题已解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-26 02:56 , Processed in 0.199160 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表