明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: rln007

排序

  [复制链接]
 楼主| 发表于 2009-11-26 14:22:00 | 显示全部楼层

感谢liu_kunlun大侠无私奉献,强烈感谢

 楼主| 发表于 2009-11-26 19:24:00 | 显示全部楼层
测试一下,有如下问题,出错如附件1,想得到的为附件2,其中圆1-2,2-3,3-4,1-4,4-5,3-6,5-6等距离相等

本帖子中包含更多资源

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

x
发表于 2009-11-26 20:18:00 | 显示全部楼层

(defun c:ttt ( / ss pt ss1 out n fid x y h)
(if (and (setq ss (ssget '((0 . "CIRCLE"))))
  (setq pt (getpoint "起点:"))
  (setq h (getdist pt "文字高度:"))
    )
    (progn
       (setq ss1 nil out nil)
       (setq n -1)
       (repeat (sslength ss) (setq ss1 (cons (ssname ss (setq n (+ n 1)) ) ss1)))      
       (setq ss1 (mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) ss1))
      
       (setq out (list (cons 0 pt)) n 0)      
       (while ss1
   (setq ss1 (vl-sort ss1 '(lambda (x y) (if (= (distance (cdr (car out)) (list (car x)(cadr x) 0))
                                                       (distance (cdr (car out)) (list (car y)(cadr y) 0))
                                                    )
                                                    (> (abs (- (caar out) (car x))) (abs (- (caar out) (car y))))
                                                    (< (distance (cdr (car out)) (list (car x)(cadr x) 0))
                                                       (distance (cdr (car out)) (list (car y)(cadr y) 0))
                                                    )
          )         )              )            )
          (setq out (cons (cons (setq n (+ n 1)) (car ss1)) out)
                ss1 (cdr ss1)
       )  )
       (setq out (cdr (reverse out)))
       (setq fid (open "c:\\test.txt" "w"))
       (foreach x out
   (entmake (list '(0 . "TEXT") (cons 10 (cdr x)) (cons 1 (itoa (car x))) (cons 40 h)))
   (write-line (strcat (itoa (car x)) "," (rtos (cadr x) 2 3) "," (rtos (caddr x) 2 3)  "," (rtos (cadddr x) 2 3)) fid)
       )
       (close fid)
)  )
)

 楼主| 发表于 2009-11-26 21:29:00 | 显示全部楼层
再次感谢liu_kunlun大侠无私奉献,还是有点小问题,如图

本帖子中包含更多资源

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

x
发表于 2009-11-26 22:40:00 | 显示全部楼层
xianaihua发表于2009-11-26 0:37:00luyu9635:不明白你的意思。是标号排序还是,图形变换?

 是对图形排序,如rln所说找最短路径,因为在做切割的时候是按画图的先后进行的,无序的,所以想通过程序重排序,按最短路径切割,就很有用了,我不需要标号,只要实际顺序变成想要的效果就行,liu-kunlun的程序还没测试,不知在图形多的时候,速度如何,如果速度跟不上,实际意义也就不大了

发表于 2009-11-27 08:24:00 | 显示全部楼层

rln007:关键是你的规则要确定好,编程只是实现。

(defun c:ttt ( / ss pt ss1 out n fid x y h)
(if (and (setq ss (ssget '((0 . "CIRCLE"))))
  (setq pt (getpoint "起点:"))
  (setq h (getdist pt "文字高度:"))
    )
    (progn
       (setq ss1 nil out nil)
       (setq n -1)
       (repeat (sslength ss) (setq ss1 (cons (ssname ss (setq n (+ n 1)) ) ss1)))      
       (setq ss1 (mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) ss1))
      
       (setq out (list (cons 0 pt)) n 0)      
       (while ss1
   (setq ss1 (vl-sort ss1 '(lambda (x y) (if (equal (distance (cdr (car out)) (list (car x)(cadr x) 0))
                                                       (distance (cdr (car out)) (list (car y)(cadr y) 0)) 0.1
                                                    )
                                                    (> (abs (- (caar out) (car x))) (abs (- (caar out) (car y))))
                                                    (< (distance (cdr (car out)) (list (car x)(cadr x) 0))
                                                       (distance (cdr (car out)) (list (car y)(cadr y) 0))
                                                    )
          )         )              )            )
          (setq out (cons (cons (setq n (+ n 1)) (car ss1)) out)
                ss1 (cdr ss1)
       )  )
       (setq out (cdr (reverse out)))
       (setq fid (open "c:\\test.txt" "w"))
       (foreach x out
   (entmake (list '(0 . "TEXT") (cons 10 (cdr x)) (cons 1 (itoa (car x))) (cons 40 h)))
   (write-line (strcat (itoa (car x)) "," (rtos (cadr x) 2 3) "," (rtos (caddr x) 2 3)  "," (rtos (cadddr x) 2 3)) fid)
       )
       (close fid)
)  )
)

 楼主| 发表于 2009-11-27 09:28:00 | 显示全部楼层
感谢liu_kunlun大侠,规则就是s形,就是图片中6号和10号位置互换,更新的程序好像还是同样的问题,程序拐上去后想让它往左,测试结果是往上走到头后才往左
发表于 2009-11-27 09:58:00 | 显示全部楼层
本帖最后由 作者 于 2009-11-27 10:18:42 编辑

是有点问题。

(defun c:ttt ( / ss pt ss1 out n fid x y h)
(if (and (setq ss (ssget '((0 . "CIRCLE"))))
  (setq pt (getpoint "起点:"))
  (setq h (getdist pt "文字高度:"))
    )
    (progn
       (setq ss1 nil out nil)
       (setq n -1)
       (repeat (sslength ss) (setq ss1 (cons (ssname ss (setq n (+ n 1)) ) ss1)))      
       (setq ss1 (mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) ss1))
      
       (setq out (list (cons 0 pt)) n 0)      
       (while ss1
   (setq ss1 (vl-sort ss1 '(lambda (x y) (if (equal (distance (cdr (car out)) (list (car x)(cadr x) 0))
                                                    (distance (cdr (car out)) (list (car y)(cadr y) 0)) 0.1
                                             )
                                             (> (abs (- (cadar out) (car x))) (abs (- (cadar out) (car y))))
                                             (< (distance (cdr (car out)) (list (car x)(cadr x) 0))
                                                (distance (cdr (car out)) (list (car y)(cadr y) 0))
                                             )
          )         )              )     )
          (setq out (cons (cons (setq n (+ n 1)) (car ss1)) out)
                ss1 (cdr ss1)
       )  )
       (setq out (cdr (reverse out)))
       (setq fid (open "c:\\test.txt" "w"))
       (foreach x out
   (entmake (list '(0 . "TEXT") (cons 10 (cdr x)) (cons 1 (itoa (car x))) (cons 40 h)))
   (write-line (strcat (itoa (car x)) "," (rtos (cadr x) 2 3) "," (rtos (caddr x) 2 3)  "," (rtos (cadddr x) 2 3)) fid)
       )
       (close fid)
)  )
)

 楼主| 发表于 2009-11-27 10:33:00 | 显示全部楼层
liu_kunlun大侠致敬,还有如图所示的问题

本帖子中包含更多资源

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

x
发表于 2009-11-27 14:16:00 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 18:33 , Processed in 0.190634 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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