wharan 发表于 2022-6-14 21:37:11

怎样根据已有文字样式创建一个新样式?

本帖最后由 wharan 于 2022-6-15 14:20 编辑

AutoCAD的已有文字样式,根据已有样式创建一个新字体,仅仅改变宽度因子。比如系统已有文字样式“Standard",字体文件分别是“txt.shx”和“hztxt.shx”,根据这个文字样式创建一个新样式“Standard01",只改变“Standard"的宽度因子,其他定义参数如字体、大小、效果等保持不变。


怎样用简单程序完成上述功能?
我用了一个笨方法:取得已有文字样式参数,重建一个新样式。代码亟待优化。
;;以已有文字样式为模板创建新文字样式
(defun Style2Style (Ostyle   Nstyle      width   /
      styleObj   name      BigFontFilefontfile
      Height   width      TextGenerationFlag
      obj
       )
(vl-load-com)
(if (tblobjname "STYLE" Nstyle)
    (progn
      (setq
styleObj (vlax-ename->vla-object (tblobjname "style" Nstyle))
      )
      (vla-put-Width styleObj width)
    )
    (progn
      (setq
styleObj (vlax-ename->vla-object (tblobjname "style" Ostyle))
      )
      (setq name (vla-get-name styleObj))
      (setq BigFontFile (vla-get-BigFontFile styleObj))
      (setq fontfile (vla-get-fontfile styleObj))
      (setq Height (vla-get-Height styleObj))
      (setq TextGenerationFlag (vla-get-TextGenerationFlag styleObj))

      (setq
obj (vla-add (vla-get-TextStyles
         (vla-get-ActiveDocument (vlax-get-acad-object))
         )
         Nstyle
      )
      )
      (vla-put-Width Obj width)
      (vla-put-BigFontFile Obj BigFontFile)
      (vla-put-fontfile Obj fontfile)
      (vla-put-Height Obj Height)
      (vla-put-TextGenerationFlag Obj TextGenerationFlag)
    )
)
)




ssyfeng 发表于 2022-6-15 09:37:11

直接修改字体样式宽度因子就好啦,修改字体很难的

mikewolf2k 发表于 2022-6-15 09:50:44

没有简单程序。如果一定要做,要反编译形文件,看里面具体怎么写的。如果运气好,形文件里用了通用的高宽代码,那么修改这一段即可,否则就要修改每一个字符。然后再编译形文件。

wharan 发表于 2022-6-15 10:02:46

本帖最后由 wharan 于 2022-6-15 10:08 编辑

mikewolf2k 发表于 2022-6-15 09:50
没有简单程序。如果一定要做,要反编译形文件,看里面具体怎么写的。如果运气好,形文件里用了通用的高宽代 ...可能没能理解我的意思

自贡黄明儒 发表于 2022-6-17 22:22:01

Ostyle如果己经存在,是不是要先删除?

wharan 发表于 2022-6-17 23:34:17

自贡黄明儒 发表于 2022-6-17 22:22
Ostyle如果己经存在,是不是要先删除?

不需要删除,做这个的目的是为了修改AutoCAD和天正的多行文字。
页: [1]
查看完整版本: 怎样根据已有文字样式创建一个新样式?