明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1141|回复: 6

[提问] 如何用lisp获取字体

[复制链接]
发表于 2024-6-3 17:26:41 | 显示全部楼层 |阅读模式
1、如何使用lisp获取cad自带的字体,并区分哪些是大字体,哪些是普通字体?

2、如何用lisp获取windows字体,并获取字体的名称(不是文件名称)?

以上两条,不知道哪位大神能够帮忙解答下?谢谢!~~~
发表于 2024-6-3 20:56:47 | 显示全部楼层
你的问题蛮清晰的,我觉得你都问了,应该会自己找答案了.
vla函数面向对象的
发表于 2024-6-3 22:01:39 | 显示全部楼层
本帖最后由 kozmosovia 于 2024-6-3 22:04 编辑

这个其实比较复杂的,SHX需要遍历支持路径去查,TTF需要去读注册表。

可以用VLDCL的内置函数(vldcl-getAllFonts)实现,VLDCL可以从https://gitee.com/kozmos/tachyon ... VLX/VLDCL-FINAL.VLX下载
最后结果是(字体样式名称 . 字体文件名)列表,TTF和SHX再样式名称中有标注,可以自己再进一步处理细分。

结果样式:

(("@extfont2 (shx-bigfont)" . "C:\\Program Files\\Autodesk\\AutoCAD 2020\\fonts\\@extfont2.shx")
("AIGDT (TrueType)" . "C:\\Windows\\Fonts\\AIGDT___.TTF")
("AMDTSymbols (shx-unifont)" . "C:\\Program Files\\Autodesk\\AutoCAD 2020\\fonts\\AMDTSymbols.shx")
("AMGDT (TrueType)" . "C:\\Windows\\Fonts\\AMGDT___.ttf")
("AMGDT DWE Edits (shx-unifont)" . "C:\\Program Files\\Autodesk\\AutoCAD 2020\\fonts\\AMGDT DWE Edits.shx")
("AMGDTANS DWE Edits (shx-shapes)" . "C:\\Program Files\\Autodesk\\AutoCAD 2020\\fonts\\AMGDTANS DWE Edits.shx")
("ARCHSTYL (shx-shapes)" . "G:\\TC2020\\LSP\\ARCHSTYL.SHX")
("AcadEref (TrueType)" . "C:\\Windows\\Fonts\\AcadEref.ttf")
("AcadEref (shx-unifont)" . "C:\\Program Files\\Autodesk\\AutoCAD 2020\\fonts\\AcadEref.shx")
("AdobeDevanagari-Bold (TrueType)" . "C:\\Program Files (x86)\\Adobe\\Acrobat DC\\Resource\\Font\\AdobeDevanagari-Bold.otf")
("AdobeDevanagari-BoldItalic (TrueType)" . "C:\\Program Files (x86)\\Adobe\\Acrobat DC\\Resource\\Font\\AdobeDevanagari-BoldItalic.otf")
("AdobeDevanagari-Italic (TrueType)" . "C:\\Program Files (x86)\\Adobe\\Acrobat DC\\Resource\\Font\\AdobeDevanagari-Italic.otf")
("AdobeDevanagari-Regular (TrueType)" . "C:\\Program Files (x86)\\Adobe\\Acrobat DC\\Resource\\Font\\AdobeDevanagari-Regular.otf")
("Aehalf (shx-unifont)" . "C:\\Program Files\\Autodesk\\AutoCAD 2020\\fonts\\aehalf.shx")
("Agency FB (TrueType)" . "C:\\Windows\\Fonts\\AGENCYR.TTF")
("Agency FB Bold (TrueType)" . "C:\\Windows\\Fonts\\AGENCYB.TTF")
("Algerian (TrueType)" . "C:\\Windows\\Fonts\\ALGER.TTF")
("AmdtSymbols (TrueType)" . "C:\\Windows\\Fonts\\AMDT_Symbols.ttf")
("Amgdt (shx-unifont)" . "C:\\Program Files\\Autodesk\\AutoCAD 2020\\fonts\\amgdt.shx")
("Amgdtans (shx-shapes)" . "C:\\Program Files\\Autodesk\\AutoCAD 2020\\fonts\\amgdtans.shx")

...
("Zilla Slab SemiBold Italic (TrueType)" . "C:\\Windows\\Fonts\\ZillaSlab-SemiBoldItalic.ttf")
("方正舒体 (TrueType)" . "C:\\Windows\\Fonts\\FZSTK.TTF")
("方正姚体 (TrueType)" . "C:\\Windows\\Fonts\\FZYTK.TTF")
("仿宋_GB2312 (TrueType)" . "C:\\Windows\\Fonts\\FSGB2312.ttf")
("汉仪综艺体简 (TrueType)" . "C:\\Windows\\Fonts\\HYZYTJ.ttf")
("华文彩云 (TrueType)" . "C:\\Windows\\Fonts\\STCAIYUN.TTF"))


发表于 2024-6-4 10:09:38 | 显示全部楼层
  1. (defun c:tt (/ font bigfont)
  2.   (vl-load-com)
  3.   (vlax-for x (vla-get-textstyles
  4.                 (vla-get-activedocument (vlax-get-acad-object))
  5.               )
  6.     (princ "\n字体样式:")
  7.     (princ (vla-get-name x))
  8.     (princ ",字体:")
  9.     (vla-getfont x 'font 'bold 'italic 'charset 'pitchandfamily)
  10.     (if        (= font "")
  11.       (princ (vla-get-fontfile x))
  12.       (princ font)
  13.     )
  14.     (if        (= (setq bigfont (vla-get-bigfontfile x)) "")
  15.       (princ ",大字体:无")
  16.       (princ (strcat ",大字体:" bigfont))
  17.     )
  18.   )
  19.   (princ)
  20. )
 楼主| 发表于 2024-6-5 15:12:23 | 显示全部楼层

你这个只是列出了字体样式内的信息,我需要的是系统中的字体信息.不过还是谢谢解答~
 楼主| 发表于 2024-6-5 15:14:23 | 显示全部楼层
kozmosovia 发表于 2024-6-3 22:01
这个其实比较复杂的,SHX需要遍历支持路径去查,TTF需要去读注册表。

可以用VLDCL的内置函数(vldcl-getA ...

好的,谢谢解答~~~晚点我去尝试下
 楼主| 发表于 2024-6-5 15:35:03 | 显示全部楼层
kozmosovia 发表于 2024-6-3 22:01
这个其实比较复杂的,SHX需要遍历支持路径去查,TTF需要去读注册表。

可以用VLDCL的内置函数(vldcl-getA ...

经过你的启发,

shx字体文件只需要获取到路径后,打开,然后读取第一行数据就可以知道是啥类型了。

TTF字体,可以从windows注册表中读取字体信息

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts

嗯,这样就可以解决问题了!~太感谢了哈~~

至于那个VLDCL的内置函数,如果要写入自己的插件中有点麻烦~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 15:24 , Processed in 0.166533 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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