明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1091|回复: 1

[提问] 请高手帮忙完美一下这个字对齐线么?当线竖直时候提示除数为0

[复制链接]
发表于 2015-5-16 08:46:39 | 显示全部楼层 |阅读模式
本帖最后由 tranney 于 2015-5-16 08:48 编辑

有人帮忙完美一下这个字对齐线么?我一直用这个程序,但是有个小bug,当线竖直时候提示除数为0,其他的情况都很好用的,先谢谢了!
;---------- 字对齐线 开始(程序2)
;;  通用grread定义
(defun ZML-GRREAD(LST / TEST TMP MODE VAL TMP2)
    (setq TEST t)
    (while TEST
  (setq TMP  (grread 2)
        MODE (car TMP)
        VAL  (cadr TMP)
  )
  (cond ((= MODE 2)
         (if (and  (setq TMP2 (assoc MODE LST))
      (setq TMP2 (cdr TMP2))
      (setq TMP2 (assoc VAL TMP2))
       )
       (eval (cons 'progn (cdr TMP2)))
       ()
         )
        )
        ((setq TMP2 (assoc MODE LST))
         (eval (cons 'progn (cdr TMP2)))
        )
        (t (princ TMP))
  )
    )
)
;;;========================================================
;;;文字随线(角度随线的)
(vl-load-com)
(defun C:xz(/ tt-01 tt-02 LST)
    ;;===============
    ;;功能:计算计算距给定点位最近的线上点 和 线上点的前进方位角
    ;;参数:EN_LINE -----线的图元名称
    ;;           PT -----给定点位
    ;;返回:距点最近的线上点 和 线上点的方位角
    (defun TT-01 (EN_LINE PT / OBJ PT1 LST ANG)
  ;;将图元名转换为 VLA对象
  (setq OBJ (vlax-ename->vla-object EN_LINE))
  ;;距pt最近的曲线上的点pt1
  (setq PT1 (vlax-curve-getclosestpointto OBJ PT))
  ;;pt1点的切线方向矢量
  (setq LST (vlax-curve-getfirstderiv
          OBJ
          (vlax-curve-getparamatpoint
        OBJ
        PT1
          )
      )
  )
  ;;计算切线方位角
  (setq ANG (atan (/ (cadr LST) (car LST))))
  ;;返回
  (list PT1 ANG)
    )
    ;;===============
    ;;功能:设置文字对象位置及角度
    (defun TT-02 (EN_TEXT PT ANG / ENT)
  (setq ENT (entget EN_TEXT))
  (setq ENT (subst (cons 10 PT) (assoc 10 ENT) ENT)
        ENT (subst (cons 11 PT) (assoc 11 ENT) ENT)
        ENT (subst (cons 50 ANG) (assoc 50 ENT) ENT)
  )
  (entmod ENT)

    )
    ;;===============
    (if  (and
      ;;
      (setq SS (entsel "\n点取线: "))
      (setq EN_LINE (car SS))
      (setq ENT_LINE (entget EN_LINE))
      (wcmatch (cdr (assoc 0 ENT_LINE))
         "LINE,ARC,LWPOLYLINE,SPLINE"
      )
      ;;
      (setq SS (entsel "\n点取文字: "))
      (setq EN_TEXT (car SS))
      (setq ENT_TEXT (entget EN_TEXT))
      (wcmatch (cdr (assoc 0 ENT_TEXT)) "TEXT,MTEXT")

  )
  (progn
      (setq LST
         (list '(5
           ;;
           (setq
            TMP
            (TT-01 EN_LINE VAL)
            PT1
            (car TMP)
            ANG
            (cadr TMP)
           )
           ;;
           (TT-02 EN_TEXT VAL ANG)
             (vlax-get-property (vlax-ename->vla-object EN_text) 'InsertionPoint )
           ;;
           (redraw)
           (grdraw VAL PT1 1)
          )
         ;;左击
         '
          (3
           (redraw)
           (setq TEST NIL)
          )
         '(25
           (redraw)
           (setq TEST NIL)
          )
         '(11
           (redraw)
           (setq TEST NIL)
          )
         )
      )
      (ZML-GRREAD LST)
  )
    )
    (princ)
)
;---------- 字对齐线 结束

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-12-27 10:46:49 | 显示全部楼层
功能挺好的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 01:19 , Processed in 0.271156 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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