找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1842|回复: 5

[LISP程序]:文字齐线 [记录这一刻]

[复制链接]
发表于 2008-12-5 13:39:55 | 显示全部楼层 |阅读模式

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

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

×
记录下这一刻,在晓东重生。。。
功能:文字齐线
命令:af
适用曲线LINE,ARC,CIRCLE,ELLIPSE

[PHP]
(defun c:af (/                 ang             elist         ename
             i                 pt             sscur         sstxt
             jw-angle-curvept             jw-angle-sharp
            )
  (princ "\n文字齐线 carrot1983")
  (vl-load-com)
  ;;(angtos (jw-angle-curvept (car (entsel)) (getpoint)) 0 )
  (defun jw-angle-curvept (ename pt / ang tan)
    (setq tan (vlax-curve-getfirstderiv
                ename
                (vlax-curve-getparamatpoint ename pt)
              )
    )
    (setq
      ang (if (= (car tan) 0)
            (* 0.5 pi)
            (angle (polar pt (atan (/ (cadr tan) (car tan))) 1) pt)
          )
    )
    ang
  )

  ;;(jw-angle-sharp ang)
  (defun jw-angle-sharp        (ang)
    (if        (and (> ang (* 0.5 pi)) ;_1.57
             (< ang (* 1.5 pi)) ;_4.71
        )
      (setq ang (- ang pi))
    )
    ang
  )

  (if (and (setq pt (getpoint "\n点取曲线上一点<退出>: "))
           (setq sstxt (ssget '((0 . "*TEXT"))))
      )
    (progn
      (setq sscur (ssget pt '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
      (setq ang (jw-angle-sharp (jw-angle-curvept (ssname sscur 0) pt)))
      (setq i -1)
      (repeat (sslength sstxt)
        (setq ename (ssname sstxt (setq i (+ i 1))))
        (setq elist (entget ename))
        (setq elist (subst (cons 50 ang) (assoc 50 elist) elist))
        (entmod elist)
      )
    )
  )
  (princ)
)

(princ)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2008-12-8 13:27:19 | 显示全部楼层
支持~好东西!不过见过好象有人编辑过是先选择对象,然后把最近点打开而形成的!不过楼主的功能比较强大~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-12 01:08:09 | 显示全部楼层
在楼主基础上改了下,可以先选择文字
同事关闭所有捕捉仅打开最近捕捉
当然程序结束会恢复原捕捉
[PHP];==============================
;    文本相关函数
;==============================
;TextAlign 文本对齐
(defun C:TextAlign (/ ang elist ename i pt sscur sstxt  iOSMODE
                                                                        jw-angle-curvept jw-angle-sharp)
        (setq iOSMODE (getvar "OSMODE"))
        (setq olderror *error*
                *error* errorTextAlign
        )
        (setvar "OSMODE" 512)
        (princ "\n文字齐线")
        (vl-load-com)
        ;;(angtos (jw-angle-curvept (car (entsel)) (getpoint)) 0 )
        (defun jw-angle-curvept (ename pt / ang tan)
                (setq tan (vlax-curve-getfirstderiv
                                ename
                                (vlax-curve-getparamatpoint ename pt)
                                        )
                )
                (setq
                        ang (if (= (car tan) 0)
                                (* 0.5 pi)
                                (angle (polar pt (atan (/ (cadr tan) (car tan))) 1) pt)
                        )
                )
                ang
        )

        ;;(jw-angle-sharp ang)
        (defun jw-angle-sharp (ang)
                (if                (and (> ang (* 0.5 pi)) ;_1.57
                                 (< ang (* 1.5 pi)) ;_4.71
                )
                        (setq ang (- ang pi))
                )
                ang
        )

        (if         (and
                                        (progn
                                                (princ "\n选需要改变方向的文字")
                                                (setq sstxt (ssget '((0 . "*TEXT"))))
                                        )
                                        (setq pt (getpoint "\n点取需要对齐的曲线或直线上一点<退出>: "))
                        )
                (progn
                        (setq sscur (ssget pt '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
                        (setq ang (jw-angle-sharp (jw-angle-curvept (ssname sscur 0) pt)))
                        (setq i -1)
                        (repeat (sslength sstxt)
                (setq ename (ssname sstxt (setq i (+ i 1))))
                (setq elist (entget ename))
                (setq elist (subst (cons 50 ang) (assoc 50 elist) elist))
                (entmod elist)
                        )
                )
        )
        (setvar "OSMODE" iOSMODE)
(princ)
)
;出错处理
(defun errorTextAlign(msg)
        (setvar "OSMODE" iOSMODE)
        (setq *error* olderror)
)

;==============================
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 312个

财富等级: 日进斗金

发表于 2016-11-19 22:53:09 | 显示全部楼层
很实用,这个程序不错,学习了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-18 21:15 , Processed in 0.406121 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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