找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 646|回复: 1

[求助] [求助]:一个相同内容文字按最短的距离相连线的程序,但不知出错在哪里,大家帮忙看

[复制链接]
发表于 2009-1-15 13:02:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
;相同内容文字按最短的距离相连线 明经 zzxxqq 2009.1.14改
(defun c:AA ( / dst ent i j k ln pt0 pt1 ptlst ptmp s1 ss)
(command ".ucs" "w")
  (if (and (setq s1 (entsel "\n请选取要连线的其中一个文字 :"))
           (setq ent (entget(car s1)))
           (= (cdr(assoc 0 ent)) "TEXT"))
   (prompt "\n框选所要连线的范围:")
   (if (setq ss (ssget (list '(0 . "TEXT") (assoc 1 ent)))) (progn
    (setq j -1 ptlst (list))
    (repeat (sslength ss)
     (setq ent (entget(ssname ss (setq j (1+ j))))
           ptlst (cons (cdr(assoc 10 ent)) ptlst))
    )
    (setq pt0 (getpoint "\n请点取开始连线的起始点 :")
          i 1 k nil dst (distance pt0 (car ptlst)) ln (length ptlst))
    (repeat (1- ln)
     (setq pt1 (nth i ptlst))
     (if (< (distance pt0 pt1) dst) (setq dst (distance pt0 pt1) k i))
     (setq i (1+ i))
    )
;   (print ptlst) (princ k)
    (if k
     (setq pt0 (nth k ptlst)
           ptmp (list pt0)
           ptlst (append
     (reverse (cdr(member pt0 (reverse ptlst)))) (cdr(member pt0 ptlst))))
    )
    (print ptmp) (print ptlst)
    (while (> (length ptlst) 1)
     (setq dst (distance (car ptlst) pt0) j 1 k nil)
     (while (< j (1- (length ptlst)))
      (setq pt1 (nth j ptlst))
      (if (< (distance pt0 pt1) dst) (setq dst (distance pt0 pt1) k j))
      (setq j (1+ j))
     )
     (if k
      (setq pt0 (nth k ptlst) ptmp (append ptmp (list pt0))
            ptlst (append
                  (reverse(cdr(member pt0 (reverse ptlst)))) (cdr(member pt0 ptlst))))
      (setq pt0 (car ptlst) ptmp (append ptmp (list pt0)) ptlst (cdr ptlst))
     )
     (print ptmp) (print ptlst)
    )
    (setq ptlst (append ptmp ptlst))
    (setq i 0)
    (command ".pline" (car ptlst))
    (repeat (1- (length ptlst))
     (command (nth (setq i (1+ i)) ptlst))
    )
    (command "")
    (command "_.change" (entlast) "" "p" "c" 1 "")
   ))
  )
  (command ".ucs" "p")
  (princ)
)
命令: aa .ucs
当前 UCS 名称: *世界*
指定 UCS 的原点或 [面(F)/命名(NA)/对象(OB)/上一个(P)/视图(V)/世界(W)/X/Y/Z/Z 轴(ZA)] <世界>: w
命令:
请选取要连线的其中一个文字 :
框选所要连线的范围:.ucs
当前 UCS 名称: *世界*
指定 UCS 的原点或 [面(F)/命名(NA)/对象(OB)/上一个(P)/视图(V)/世界(W)/X/Y/Z/Z 轴(ZA)] <世界>: p
命令:


哪位高手能帮帮忙看看错在哪里,急用,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2009-1-15 13:37:08 | 显示全部楼层
最好弄个 dwg 好测试
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-16 10:18 , Processed in 0.213949 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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