找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 799|回复: 3

[求助] [求助]:锁定文字高度的设定

[复制链接]
发表于 2005-8-30 17:08:56 | 显示全部楼层 |阅读模式

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

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

×
……今天在※AutoCAD 软件使用技术※下载了一个标注坐标的LISP,个人认为很不错。只是在使用的时候有一点不便,那就是每次输入命令后都要设定一下文字高度。实际上,大多数时候一张图就只需要一种文字高度,至少标注是这样的。
……我想请高手朋友们帮个忙,帮我修改一下,变成每张图第一次使用的时候问一下,今后就不问了。不知道可以吗
……
……
……
……附上程序:
[PHP]code:
;;;zbbz

;;; 标注时是按当前的UCS的,但是数值还是 WCS 的,

;;; 不用转换到 WCS。


;============================== 开始 ==============================

(defun c:zbbz ()

;============================== 设置 ==============================

  (prompt "\n输入字高:<") (princ (getvar "textsize")) (princ ">")
  (setq 输入字高 (getreal))
  (if (not 输入字高)
      (setq 字高 (getvar "textsize"))
      (setq 字高 输入字高)
  )
  (setq old_dimzin (getvar "dimzin"))
  (setvar "dimzin" 1)
  (setq 精度 3)                     
  (setvar "cmdecho" 0)
  (标注)
)


;====================== 取起点的位置及数值 ======================

  (defun 标注()
    (setq 标注点 (getpoint "\n点取标注点:"))
    (if 标注点 (继续) (退出))
  )

  (defun 继续()
    (setq 绝对标注点 (trans 标注点 1 0))
    (setq x_坐标值 (rtos (car   绝对标注点) 2 精度))
    (setq y_坐标值 (rtos (nth 1 绝对标注点) 2 精度))


;=================== 取标注引线位置及长度和角度 ===================

    (setq 临时起点 (getpoint 标注点 "\n点取标注位置:"))
    (setq 引线长度 (distance 标注点 临时起点))
    (setq 临时角度 (atof (angtos (angle 标注点 临时起点 ) 0 3)))
  

;================= 检查标注引线的角度并设为标准值 =================

    (setq 标准角度 (cond ((<= 临时角度    15)   0)
                         ((<= 临时角度  37.5)  30)
                         ((<= 临时角度  52.5)  45)
                         ((<= 临时角度  67.5)  60)
                         ((<= 临时角度   105)  90)
                         ((<= 临时角度 127.5) 120)
                         ((<= 临时角度   141) 135)
                         ((<= 临时角度   165) 150)
                         ((<= 临时角度   195) 180)
                         ((<= 临时角度 217.5) 210)
                         ((<= 临时角度 232.5) 225)
                         ((<= 临时角度   255) 240)
                         ((<= 临时角度   285) 270)
                         ((<= 临时角度 307.5) 300)
                         ((<= 临时角度 322.5) 315)
                         ((<= 临时角度   345) 330)
                         (0)
                   )
    )





;======================= 设标注引线终点的位置 =======================

    (setq 起点 (polar 标注点 (angtof (itoa 标准角度) 0) 引线长度))
  

;===================== 设标注线终点的位置及方向 ===================

    (setq x_字符数 (strlen  x_坐标值))
    (setq y_字符数 (strlen  y_坐标值))
    (if (> x_字符数 y_字符数)
        (setq 坐标字符数 x_字符数)
        (setq 坐标字符数 y_字符数)
    )
  
    (setq 坐标字符长 (* 坐标字符数 字高))  
    (if (and (< 标准角度 270) (> 标准角度 90))
        (setq 标注方向 180)
        (setq 标注方向 0)
    )
  
    (if (= 标注方向 180)
        (setq 终点 (list (- (car 起点) 坐标字符长)  (nth 1 起点)))
        (setq 终点 (list (+ (car 起点) 坐标字符长)  (nth 1 起点)))
    )


;======================== 设标注数字的起点 ========================

    (if (= 标注方向 0) (setq 文字开始点 起点) (setq 文字开始点 终点))  
    (setq 起点_x (list (car 文字开始点)
                       (+ (nth 1 文字开始点) (/ 字高 3.5))))
    (setq 起点_y (list (car 文字开始点)
                       (- (nth 1 文字开始点) 字高 (/ 字高 3.5))))
  

;======================= 使两个坐标字符等长 =======================

    (setq 相差字符数 (abs(- x_字符数 y_字符数)))
    (setq 补充空格数 "")
    (repeat 相差字符数 (setq 补充空格数 (strcat 补充空格数 " ")))
    (if (= 相差字符数 0)
        (setq x_c (strcat "Y " x_坐标值) y_c (strcat "X " y_坐标值)))
  
    (if (and (/= l 0) (> x_字符数 y_字符数))  
        (setq x_c (strcat "Y " x_坐标值)
              y_c (strcat "X "  补充空格数 y_坐标值)))
  
    (if (and (/= l 0) (< x_字符数 y_字符数))  
        (setq x_c (strcat "Y "  补充空格数 x_坐标值)
              y_c (strcat "X " y_坐标值)))

  
;============================= 标注 ===============================

(setq OLD_OSMODE (getvar "osmode"))
(setvar "osmode" 0)
(command "_.text" 起点_X 字高 "0" Y_C)
(setq T1 (entlast))
(setq LEN (textbox (list (assoc 1 (entget (entlast))))))
(setq LEN (- (car (nth 1 LEN)) (car (nth 0 LEN))))
(command "_.text" 起点_Y 字高 "0" X_C)
(setq T2 (entlast))
(setq LEN1 (textbox (list (assoc 1 (entget (entlast))))))
(setq LEN1 (- (car (nth 1 LEN1)) (car (nth 0 LEN1))))
(if (> LEN1 LEN)
(setq LEN LEN1)
)
(command "_.line"
标注点
起点
(setq PT (polar 起点 (angle 起点 终点) LEN))
""
)
(if (= 标注方向 180)
(command "_.move"
T1
T2
""
起点_X
(polar 起点_X PI (- (car 起点_X) (car PT)))
)
)
(setvar "osmode" OLD_OSMODE)
(标注)
)

;============================== 还原 ==============================

  (defun 退出()
    (setvar "dimzin" old_dimzin)
    (setvar "cmdecho" 1)
    (princ)
  )


;============================== 结束 ==============================[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-8-30 18:14:59 | 显示全部楼层
试试签名栏下的坐标标注程序。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-8-30 18:27:27 | 显示全部楼层
;;;用汉字作变量,挺有趣的
;code:
;;;zbbz

;;; 标注时是按当前的UCS的,但是数值还是 WCS 的,

;;; 不用转换到 WCS。


;============================== 开始 ==============================

(defun c:zbbz ()

;============================== 设置 ==============================

  
  
  (if (= srzg nil)
  (progn
   (prompt "\n输入字高:<") (princ (getvar "textsize")) (princ ">")
   (setq srzg (getreal)))
   )
   
   
   
  
  (if (not srzg)
      (setq 字高 (getvar "textsize"))
      (setq 字高 srzg)
  )
  (setq old_dimzin (getvar "dimzin"))
  (setvar "dimzin" 1)
  (setq 精度 3)                     
  (setvar "cmdecho" 0)
  (标注)
)


;====================== 取起点的位置及数值 ======================

  (defun 标注()
    (setq 标注点 (getpoint "\n点取标注点:"))
    (if 标注点 (继续) (退出))
  )

  (defun 继续()
    (setq 绝对标注点 (trans 标注点 1 0))
    (setq x_坐标值 (rtos (car   绝对标注点) 2 精度))
    (setq y_坐标值 (rtos (nth 1 绝对标注点) 2 精度))


;=================== 取标注引线位置及长度和角度 ===================

    (setq 临时起点 (getpoint 标注点 "\n点取标注位置:"))
    (setq 引线长度 (distance 标注点 临时起点))
    (setq 临时角度 (atof (angtos (angle 标注点 临时起点 ) 0 3)))
  

;================= 检查标注引线的角度并设为标准值 =================

    (setq 标准角度 (cond ((<= 临时角度    15)   0)
                         ((<= 临时角度  37.5)  30)
                         ((<= 临时角度  52.5)  45)
                         ((<= 临时角度  67.5)  60)
                         ((<= 临时角度   105)  90)
                         ((<= 临时角度 127.5) 120)
                         ((<= 临时角度   141) 135)
                         ((<= 临时角度   165) 150)
                         ((<= 临时角度   195) 180)
                         ((<= 临时角度 217.5) 210)
                         ((<= 临时角度 232.5) 225)
                         ((<= 临时角度   255) 240)
                         ((<= 临时角度   285) 270)
                         ((<= 临时角度 307.5) 300)
                         ((<= 临时角度 322.5) 315)
                         ((<= 临时角度   345) 330)
                         (0)
                   )
    )





;======================= 设标注引线终点的位置 =======================

    (setq 起点 (polar 标注点 (angtof (itoa 标准角度) 0) 引线长度))
  

;===================== 设标注线终点的位置及方向 ===================

    (setq x_字符数 (strlen  x_坐标值))
    (setq y_字符数 (strlen  y_坐标值))
    (if (> x_字符数 y_字符数)
        (setq 坐标字符数 x_字符数)
        (setq 坐标字符数 y_字符数)
    )
  
    (setq 坐标字符长 (* 坐标字符数 字高))  
    (if (and (< 标准角度 270) (> 标准角度 90))
        (setq 标注方向 180)
        (setq 标注方向 0)
    )
  
    (if (= 标注方向 180)
        (setq 终点 (list (- (car 起点) 坐标字符长)  (nth 1 起点)))
        (setq 终点 (list (+ (car 起点) 坐标字符长)  (nth 1 起点)))
    )


;======================== 设标注数字的起点 ========================

    (if (= 标注方向 0) (setq 文字开始点 起点) (setq 文字开始点 终点))  
    (setq 起点_x (list (car 文字开始点)
                       (+ (nth 1 文字开始点) (/ 字高 3.5))))
    (setq 起点_y (list (car 文字开始点)
                       (- (nth 1 文字开始点) 字高 (/ 字高 3.5))))
  

;======================= 使两个坐标字符等长 =======================

    (setq 相差字符数 (abs(- x_字符数 y_字符数)))
    (setq 补充空格数 "")
    (repeat 相差字符数 (setq 补充空格数 (strcat 补充空格数 " ")))
    (if (= 相差字符数 0)
        (setq x_c (strcat "Y " x_坐标值) y_c (strcat "X " y_坐标值)))
  
    (if (and (/= l 0) (> x_字符数 y_字符数))  
        (setq x_c (strcat "Y " x_坐标值)
              y_c (strcat "X "  补充空格数 y_坐标值)))
  
    (if (and (/= l 0) (< x_字符数 y_字符数))  
        (setq x_c (strcat "Y "  补充空格数 x_坐标值)
              y_c (strcat "X " y_坐标值)))

  
;============================= 标注 ===============================

(setq OLD_OSMODE (getvar "osmode"))
(setvar "osmode" 0)
(command "_.text" 起点_X 字高 "0" Y_C)
(setq T1 (entlast))
(setq LEN (textbox (list (assoc 1 (entget (entlast))))))
(setq LEN (- (car (nth 1 LEN)) (car (nth 0 LEN))))
(command "_.text" 起点_Y 字高 "0" X_C)
(setq T2 (entlast))
(setq LEN1 (textbox (list (assoc 1 (entget (entlast))))))
(setq LEN1 (- (car (nth 1 LEN1)) (car (nth 0 LEN1))))
(if (> LEN1 LEN)
(setq LEN LEN1)
)
(command "_.line"
标注点
起点
(setq PT (polar 起点 (angle 起点 终点) LEN))
""
)
(if (= 标注方向 180)
(command "_.move"
T1
T2
""
起点_X
(polar 起点_X PI (- (car 起点_X) (car PT)))
)
)
(setvar "osmode" OLD_OSMODE)
(标注)
)

;============================== 还原 ==============================

  (defun 退出()
    (setvar "dimzin" old_dimzin)
    (setvar "cmdecho" 1)
    (princ)
  )


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

使用道具 举报

 楼主| 发表于 2005-8-30 18:41:24 | 显示全部楼层
谢谢楼上的两位朋友,两个都试用了一下。
二楼xyp1964斑竹的功能很强大,不过使用比较繁琐,我只需要简单的标注就行了。
三楼snoopychen朋友改的完全符合我的要求。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 12:40 , Processed in 0.184869 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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