kozmosovia 发表于 2024-8-3 12:29:03

从美观考虑,所有字体设计时每个字符的宽度都不是统一一样的。要准确,就只有写好了才知道。汉字稍微好一些,数字和英文,I1要比4W窄的多。

tender138 发表于 2024-8-3 14:00:03

kozmosovia 发表于 2024-8-3 12:29
从美观考虑,所有字体设计时每个字符的宽度都不是统一一样的。要准确,就只有写好了才知道。汉字稍微好一些 ...

确实如此,所有很难精确的估算

ludaweb 发表于 2024-8-3 15:18:27

tender138 发表于 2024-8-3 07:26
试过textbox了,不行

应该可以的,你再试试看,假设你宋体的字体样式是"Standard"
(setvar "textstyle" "Standard")(setvar "textsize" 100.0)(setq tBox (textbox (list (cons 1 "Test123测试"))))(- (car (cadr tBox)) (car (car tBox)))

tender138 发表于 2024-8-3 21:47:50

ludaweb 发表于 2024-8-3 15:18
应该可以的,你再试试看,假设你宋体的字体样式是"Standard"
(setvar "textstyle" "Standard")(setvar " ...

非常感谢!我试过了,不对的原因是我用 -text 的时候设置了宽度因子。请问怎么获取当前文字的宽度因子?

muai2010 发表于 2024-8-3 22:17:04

今天刚修改一个标注,用到了,参考别人的也是用的textbox得到的宽带,你试试没问题的

ludaweb 发表于 2024-8-3 22:22:39

tender138 发表于 2024-8-3 21:47
非常感谢!我试过了,不对的原因是我用 -text 的时候设置了宽度因子。请问怎么获取当前文字的宽度因子?

(setq st (vlax-ename->vla-object (tblobjname "style" "Standard")))
获取宽度因子(vla-get-width st)
设置宽度因子(vla-put-width st 0.75)

bskidtf 发表于 2024-8-3 22:40:19

可以的,不需要文字样式也可以

tender138 发表于 2024-8-4 07:26:14

ludaweb 发表于 2024-8-3 22:22
(setq st (vlax-ename->vla-object (tblobjname "style" "Standard")))
获取宽度因子(vla-get-width st) ...

非常感谢大师的一再指导,谢谢!:handshake

Bao_lai 发表于 2024-8-4 08:11:52

不能的,同一种文字样式,不同的字宽度是不同的,除非用那种等宽字体。

tender138 发表于 2024-8-4 15:02:46

ludaweb 发表于 2024-8-3 22:22
(setq st (vlax-ename->vla-object (tblobjname "style" "Standard")))
获取宽度因子(vla-get-width st) ...

我做个测试,有的正确,有的不对,不知道咋回事

;计算多行文字所需宽度
(defun c:tt( / txt len)
(setq txt "C12@200\n均长2917×9根")
(setq len (GetMtxtWide txt 100 "\n"))
(vl-cmdf "_mtext" (getpoint "\n文字插入点:") "J" "BL" "H" 100 "W" len txt "")
)
;字符串,字高,分隔符
(defun GetMtxtWide(str ZiGao FGF / txtStyl txtSize tBox txtWide)
;获取多行文本最大行字符串
(defun MaxStr (OrigStr Split / strL pos maxLen mStr)
    (setq maxLen 0)
    (if (/= (substr OrigStr (- (strlen OrigStr) 1) 1) Split)
      (setq OrigStr (strcat OrigStr Split))
    )
    (while (setq pos (vl-string-search Split OrigStr))
      (progn
      (setq strL (substr OrigStr 1 pos))
      (setq OrigStr (substr OrigStr (+ pos 1 (strlen Split))))
      (if (> (strlen strL) maxLen)
          (progn
            (setq maxLen (strlen strL))
            (setq mStr strL)
          )
      )
      )
    )
    mStr
)
;计算最大行文字所需宽度
(setq str (MaxStr str FGF))
(setq txtStyl (getvar "textstyle"))
(setq txtSize (getvar "textsize"))
(setvar "textstyle" txtStyl)
(setvar "textsize" ZiGao)
(setq tBox (textbox (list (cons 1 str))))
(setq txtWide (- (car (cadr tBox)) (car (car tBox))))
(if (/= txtStyl nil) (setvar "textstyle" txtStyl))
(if (/= txtSize nil) (setvar "textsize" txtSize))
txtWide
)
页: 1 [2] 3
查看完整版本: 已知文字样式及文字高度,有没有办法测算出未知文本宽度?