救命啊,大侠们救救小女子,取得文字高度根据这个输入新高度
请教,如何把下面 (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))
)
)
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)
) 在前面加个选字高就好了
(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: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))
)
)
这个不好整吧,毕竟文字大小不统一的话,有多个,也不好给你整到输入提示里面去啊,除了想cad属性里面那样,整成*多种*
只选取一个文本,所以高度是一样 可以拾取一个自己希望的当个预设标准不,直接框选感觉确实不行吧,除非能保证框选的都是一样大小的 在找一个获得文字高度的程序插进来即可。
至于说框选的可能多个字高不一样,好解决,取第一个即可。用户自己控制只选一个。
LISP不懂,看起来是修改所有字高?如果是这样,直接在属性框里改就是了。 每次都要点开属性改,很麻烦给啊,有了这个代码就方便很多了 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大侠,但是显示不出来选取的文本字高,读不出来 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