fedd 发表于 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))
)
)


fangmin723 发表于 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)
)

start4444 发表于 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))
)
)

tryhi 发表于 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))
        )
)

fangmin723 发表于 2021-11-10 16:26:25

这个不好整吧,毕竟文字大小不统一的话,有多个,也不好给你整到输入提示里面去啊,除了想cad属性里面那样,整成*多种*

fedd 发表于 2021-11-10 16:35:11

只选取一个文本,所以高度是一样

xj6019 发表于 2021-11-10 16:35:21

可以拾取一个自己希望的当个预设标准不,直接框选感觉确实不行吧,除非能保证框选的都是一样大小的

mikewolf2k 发表于 2021-11-10 16:50:58

在找一个获得文字高度的程序插进来即可。
至于说框选的可能多个字高不一样,好解决,取第一个即可。用户自己控制只选一个。
LISP不懂,看起来是修改所有字高?如果是这样,直接在属性框里改就是了。

fedd 发表于 2021-11-10 16:56:16

每次都要点开属性改,很麻烦给啊,有了这个代码就方便很多了

fedd 发表于 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大侠,但是显示不出来选取的文本字高,读不出来

fedd 发表于 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大侠,解决了我的一个大难题:lol
不过就是当我把字高设置在12,重新修改时,读取的字高明明是12,显示的却是1',我改成15,显示的是1‘3",这是怎么回事呢?
还有就是我能不能实现另一种功能,只选取一次单个文本,显示这个文本的高度,输入新高度后回车就改变这个文本的高度,不需要另外再选取别的文本了,这样能实现吗?请start4444再次指点,小女子万分感谢:loveliness:
页: [1] 2
查看完整版本: 救命啊,大侠们救救小女子,取得文字高度根据这个输入新高度