如何用lisp获取字体
1、如何使用lisp获取cad自带的字体,并区分哪些是大字体,哪些是普通字体?2、如何用lisp获取windows字体,并获取字体的名称(不是文件名称)?
以上两条,不知道哪位大神能够帮忙解答下?谢谢!~~~
你的问题蛮清晰的,我觉得你都问了,应该会自己找答案了.
vla函数面向对象的 本帖最后由 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"))
(defun c:tt (/ font bigfont)
(vl-load-com)
(vlax-for x (vla-get-textstyles
(vla-get-activedocument (vlax-get-acad-object))
)
(princ "\n字体样式:")
(princ (vla-get-name x))
(princ ",字体:")
(vla-getfont x 'font 'bold 'italic 'charset 'pitchandfamily)
(if (= font "")
(princ (vla-get-fontfile x))
(princ font)
)
(if (= (setq bigfont (vla-get-bigfontfile x)) "")
(princ ",大字体:无")
(princ (strcat ",大字体:" bigfont))
)
)
(princ)
) gaics 发表于 2024-6-4 10:09
你这个只是列出了字体样式内的信息,我需要的是系统中的字体信息.不过还是谢谢解答~ kozmosovia 发表于 2024-6-3 22:01
这个其实比较复杂的,SHX需要遍历支持路径去查,TTF需要去读注册表。
可以用VLDCL的内置函数(vldcl-getA ...
好的,谢谢解答~~~晚点我去尝试下 kozmosovia 发表于 2024-6-3 22:01
这个其实比较复杂的,SHX需要遍历支持路径去查,TTF需要去读注册表。
可以用VLDCL的内置函数(vldcl-getA ...
经过你的启发,
shx字体文件只需要获取到路径后,打开,然后读取第一行数据就可以知道是啥类型了。
TTF字体,可以从windows注册表中读取字体信息
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
嗯,这样就可以解决问题了!~太感谢了哈~~
至于那个VLDCL的内置函数,如果要写入自己的插件中有点麻烦~
页:
[1]