明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2307|回复: 14

[提问] 救命啊,大侠们救救小女子,取得文字高度根据这个输入新高度

[复制链接]
发表于 2021-11-10 16:14:13 | 显示全部楼层 |阅读模式
请教,如何把下面 (setq hig (getreal "\n输入新字高<3>:"))中的3变成选取文字的高度?然后根据目前的高度,输入适合的高度调整

(DEFUN C:CHHTEXT ()
(princ "\nselect object:")
(setq s (ssget))
(setq hig (getreal "\n输入新字高<3>:"))
(if (= hig nil) (setq hig 3.0))
(setq h40 (cons 40 hig))
(setq n (sslength s))
(setq k 0 )
(while (< k n)
      (setq name (ssname s k))
      (setq a (entget name))
      (setq b (assoc '0 a))
      (setq b (cdr b))
      (if (= b "TEXT")(progn
        (setq h (assoc '40 a))
        (setq a (subst h40 h a))
        (entmod a)
        ))
      (setq k (+ k 1))
)
)


发表于 2021-11-11 10:29:26 | 显示全部楼层
fedd 发表于 2021-11-11 07:00
感谢start4444大侠,解决了我的一个大难题
不过就是当我把字高设置在12,重新修改时,读取的字高明 ...

(defun c:ctxt(/ dxf40 edata ent hig newhig)
        (if (and (setq ent (entsel "\n请点选需要修改字高的单行文字:")) (equal "TEXT" (cdr (assoc 0 (setq edata (entget (setq ent (car ent))))))));;判断是否成功选择
                (progn
                        (setq hig (cdr (setq dxf40 (assoc 40 edata))));;获取当前文字字高
                        (if (setq newhig (getreal (strcat "\n请输入新的高度,当前字高<" (rtos hig) ">:")));;输入新的字高并判断是否为成功输入,成功输入则修改,否则则静默退出
                                (entmod (setq edata (subst (cons 40 newhig) dxf40 edata)))
                                (princ "\n无效输入,不作修改!!!")
                        )
                )
                (alert "\n没有选择单行文字对象!")
        )
        (prin1)
)

评分

参与人数 1明经币 +1 收起 理由
bssurvey + 1 赞一个!

查看全部评分

发表于 2021-11-10 18:41:19 | 显示全部楼层
在前面加个选字高就好了

(DEFUN C:tt5 (/ a b en h h_mr h40 hig k n name s)
(setq en (car (entsel "\n选择参照字高<3>:")))
(if en (setq h_mr (cdr (assoc 40 (entget en)))) (setq h_mr 3))

(setq hig (getreal (strcat "\n输入新字高<" (rtos h_mr 3 2) ">:")))
(if (not hig) (setq hig h_mr))       
(setq s (ssget))
(setq h40 (cons 40 hig))
(setq n (sslength s))
(setq k 0 )
(while (< k n)
      (setq name (ssname s k))
      (setq a (entget name))
      (setq b (assoc '0 a))
      (setq b (cdr b))
      (if (= b "TEXT")(progn
        (setq h (assoc '40 a))
        (setq a (subst h40 h a))
        (entmod a)
        ))
      (setq k (+ k 1))
)
)
发表于 2021-11-10 17:24:29 | 显示全部楼层
本帖最后由 tryhi 于 2021-11-10 17:26 编辑

(DEFUN C:CHHTEXT (/ a en h h40 k name s)
        (princ "\nselect object:")
        (setq s (ssget '((0 . "TEXT"))))
        (setq en (car(entsel "\n选择目标字高<3>")))
        (setq h40(if en (assoc 40 (entget en))'(40 . 3.0)))
        (setq k 0 )
        (while (setq name (ssname s k))
                (setq a (entget name))
                (setq h (assoc 40 a))
                (setq a (subst h40 h a))
                (entmod a)
                (setq k (1+ k))
        )
)
发表于 2021-11-10 16:26:25 | 显示全部楼层
这个不好整吧,毕竟文字大小不统一的话,有多个,也不好给你整到输入提示里面去啊,除了想cad属性里面那样,整成*多种*
 楼主| 发表于 2021-11-10 16:35:11 | 显示全部楼层
只选取一个文本,所以高度是一样
发表于 2021-11-10 16:35:21 | 显示全部楼层
可以拾取一个自己希望的当个预设标准不,直接框选感觉确实不行吧,除非能保证框选的都是一样大小的
发表于 2021-11-10 16:50:58 | 显示全部楼层
在找一个获得文字高度的程序插进来即可。
至于说框选的可能多个字高不一样,好解决,取第一个即可。用户自己控制只选一个。
LISP不懂,看起来是修改所有字高?如果是这样,直接在属性框里改就是了。
 楼主| 发表于 2021-11-10 16:56:16 | 显示全部楼层
每次都要点开属性改,很麻烦给啊,有了这个代码就方便很多了
 楼主| 发表于 2021-11-11 06:48:28 | 显示全部楼层
tryhi 发表于 2021-11-10 17:24
(DEFUN C:CHHTEXT (/ a en h h40 k name s)
        (princ "\nselect object:")
        (setq s (ssget '((0 . "TEXT" ...

谢谢tryhi大侠,但是显示不出来选取的文本字高,读不出来
 楼主| 发表于 2021-11-11 07:00:36 | 显示全部楼层
start4444 发表于 2021-11-10 18:41
在前面加个选字高就好了

(DEFUN C:tt5 (/ a b en h h_mr h40 hig k n name s)

感谢start4444大侠,解决了我的一个大难题
不过就是当我把字高设置在12,重新修改时,读取的字高明明是12,显示的却是1',我改成15,显示的是1‘3",这是怎么回事呢?
还有就是我能不能实现另一种功能,只选取一次单个文本,显示这个文本的高度,输入新高度后回车就改变这个文本的高度,不需要另外再选取别的文本了,这样能实现吗?请start4444再次指点,小女子万分感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-17 06:24 , Processed in 0.187349 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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