找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 516|回复: 2

[LISP程序]:文本位置交换程序

[复制链接]

已领礼包: 3719个

财富等级: 富可敌国

发表于 2004-7-28 12:44:52 | 显示全部楼层 |阅读模式

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

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

×
看了论坛文章中心的“为AutoCAD增加几个实用小工具”的文章,其中一个实用小工具是对两个文本进行位置互换,觉得很有用。不过觉得有点不方便,程序只能对两个文本进行位置互换。因此,试着写了一个对两行文本进行位置互换的程序。本程序既可单选,也可多选。
  由于本人只懂一点点编程,因此,大家如果觉得程序写得不好,请多多谅解。

用法:第一行文本选择完毕后,回车,再选择第二行文本。

  (defun c:chgtp (/ ssg1 ssg2 n n1 ssn ssna ssn1 ssna1 pnt_y pnt_y1 snam ssnam
                    snam1 ssnam1 pnt_xy pnt_xy1 pt_xy pt_xy1)
    (setq n 0 n1 0 m 0 m1 0)
    (prompt "选取要交换位置的第一行文本:")
    (setq ssg1 (ssget))
    (prompt "选取要交换位置的第二行文本:")
    (setq ssg2 (ssget))
-------------------------------------------------------------------------------
;;如果每行文本中选择了非文本图元,则循环判断选择集中图元是否为单行文本,
;;如是单行文本,则终止循环,并获得该文本的y坐标。
    (repeat (sslength ssg1)
            (setq ssn (ssname ssg1 n))
            (setq ssna (entget ssn))
            (if (= "TEXT" (cdr (assoc 0 ssna)))
                (setq pnt_y (cadr (cdr (assoc 10 ssna))))
            )
            (setq n (1+ n))
    )
    (repeat (sslength ssg2)
            (setq ssn1 (ssname ssg2 n1))
            (setq ssna1 (entget ssn1))
            (if (= "TEXT" (cdr (assoc 0 ssna1)))
                (setq pnt_y1 (cadr (cdr (assoc 10 ssna1))))
             )
            (setq n1 (1+ n1))
    )
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
;;循环取出每个选择集中各图元坐标的x坐标。如图元是文本,则用该文本的x坐标
;;与另一个选择集中的第一个文本的y坐标组合成新坐标,并替换原坐标
    (repeat (sslength ssg1)
            (setq snam (ssname ssg1 m))
            (setq ssnam (entget snam))
            (setq pnt_xy (cdr (assoc 10 ssnam)))
            (if (= "TEXT" (cdr (assoc 0 ssnam)))
                (progn
                  (setq pt_xy (list 10 (car pnt_xy) pnt_y1 ))
                  (setq ssnam (subst pt_xy (assoc 10 ssnam) ssnam))
                  (cond ((/= 0 (cdr (assoc 72 ssnam)))
                         (setq ssnam (subst (cons 72 0) (assoc 72 ssnam) ssnam)))
                        ((/= 0 (cdr (assoc 73 ssnam)))
                         (setq ssnam (subst (cons 73 0) (assoc 73 ssnam) ssnam)))
                  )
                 (entmod ssnam)
                 );;end progn
            ) ;;end if
           (setq m (1+ m))
    )
    (repeat (sslength ssg2)
            (setq snam1 (ssname ssg2 m1))
            (setq ssnam1 (entget snam1))
            (setq pnt_xy1 (cdr (assoc 10 ssnam1)))
            (if (= "TEXT" (cdr (assoc 0 ssnam1)))
                (progn
                  (setq text_ssna1 (assoc 1 ssnam1))
                  (setq pt_xy1 (list 10 (car pnt_xy1) pnt_y ))
                  (setq ssnam1 (subst pt_xy1 (assoc 10 ssnam1) ssnam1))
                  (cond ((/= 0 (cdr (assoc 72 ssnam1)))
                         (setq ssnam1 (subst (cons 72 0) (assoc 72 ssnam1) ssnam1)))
                        ((/= 0 (cdr (assoc 73 ssnam1)))
                         (setq ssnam1 (subst (cons 73 0) (assoc 73 ssnam1) ssnam1)))
                  )
                 (entmod ssnam1)
                 ) ;;end progn
            ) ;;end if
           (setq m1 (1+ m1))
    )
)
---------------------------------------------------------------------------------------
(princ "\n程序已加载!程序命令名:chgtp ")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-7-28 13:59:59 | 显示全部楼层
写的不错,楼主继续~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-16 23:18:06 | 显示全部楼层
有点意思,不过没多大用处阿,空的时候消磨时间玩玩也好啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 02:45 , Processed in 0.399867 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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