只需一步,快速开始
感谢liu_kunlun大侠无私奉献,强烈感谢
使用道具 举报
您需要 登录 才可以下载或查看,没有账号?注册
(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)) ))
xianaihua发表于2009-11-26 0:37:00luyu9635:不明白你的意思。是标号排序还是,图形变换?
是对图形排序,如rln所说找最短路径,因为在做切割的时候是按画图的先后进行的,无序的,所以想通过程序重排序,按最短路径切割,就很有用了,我不需要标号,只要实际顺序变成想要的效果就行,liu-kunlun的程序还没测试,不知在图形多的时候,速度如何,如果速度跟不上,实际意义也就不大了
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)) ))
是有点问题。
(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)) ))
rln007:
到rln007@sohu.com中去取
本版积分规则 发表回复 回帖后跳转到最后一页
小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 ) ©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途
GMT+8, 2025-6-12 20:32 , Processed in 0.178949 second(s), 19 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.