文本样式visual lisp例程
我有一个lisp例程,可以将字体从一种或多种类型更新为单一类型。这是:
(vl-load-com)
(defun c:TXSHX (/ new)
(setq new "C:/Program Files/Autodesk/AutoCAD 2016/Fonts/simplex.shx")
(vlax-map-collection(vla-get-textstyles(vla-get-activedocument(vlax-get-acad-object)))
'(lambda (x / font)
(setq font (strcase (vla-get-fontfile x)))
(if (wcmatch font "simplex.ttf,simplex.shx,simplex._ttf,simplex._shx")
(vla-put-fontfile x new)))
)
(princ)
)
我不知道为什么,但它不起作用。我没有出错,也没有任何变化。我最初是从一个论坛帖子上得到这个例程的。我根据需要对其进行了修改,但它在其原始形式下仍具有功能
这是原件:
(vl-load-com)
(defun c:updateTextstyles (/ new)
(setq new (strcat (getenv "systemroot") "\\Fonts\\Arial.ttf"))
(vlax-map-collection
(vla-get-textstyles
(vla-get-activedocument
(vlax-get-acad-object)))
'(lambda (x / font)
(setq font (strcase (vla-get-fontfile x)))
(if (wcmatch font "ROMANS.SHX,SIMPLEX.SHX,TXT.SHX")
(vla-put-fontfile x new)))
)
(princ)
)
我正在使用的图形文件有点奇怪,因为它们是从revit导出的。例如:样式表中的值将字体显示为“simplex_u.ttf”,但用户界面将字体显示为“simplex.shx”。重新选择单纯形。shx修复了样式表。我正在尝试将其自动化,但当我运行例程时,它并没有改变。 请阅读以下内容:
http://www.cadtutor.net/forum/showthread.php?9184-代码发布指南
并将匹配模式字符串更改为:
"simplex.ttf,simplex.shx,simplex._ttf,simplex._shx "至:
"SIMPLEX.TTF,SIMPLEX.SHX,SIMPLEX._TTF,SIMPLEX._SHX"所有大写字母,无尾随空格。 或者,只需为第一个例程添加t符号,如下所示:
(setq font (strcase (vla-get-fontfile x) t))
他们中约有一半的人通过修缮这个案子获得了成功。我也换了单纯形_shx到simple_2;。shx,因为这是一种类型。由于某种原因,他们中只有一半人改变了。
这将有助于您张贴一个示例图纸,供我们测试。否则,几乎不可能确定图形中发生了什么。如果wcmatch测试在某些方面(但不是全部)起作用,那么它几乎肯定与您的wcmatch测试有关。也许为了排除故障,您应该使用(vlax map collection)函数和“vla get fontfile”,并将结果打印到命令行,以查看接下来会发生什么。还要检查替换字体的路径。除非在搜索路径的多个位置有“simplex.shx”,否则您应该能够替换:
(setq new "C:/Program Files/Autodesk/AutoCAD 2016/Fonts/simplex.shx")
使用:
(setq new (findfile "simplex.shx")) 好的,我在AUGI论坛上找到了下面的代码。我在文章的最后添加了一个链接。这似乎效果很好。它使用了我在读过的LISP指南中没有看到的函数,与我发现的其他LISP例程不同,它不需要选择活动文档或样式表。我猜最大的变化是wcmatch搜索字符串而不是字体。
(defun c:allstyle2romansshx nil
(foreach st (ai_table "STYLE" 4)
(if (wcmatch st "RomanD*")
(progn
(command "_.STYLE" st "romans.shx")
(while (< 0 (getvar 'cmdactive))
(command "")
)
)
)
)
(princ)
)
http://forums.augi.com/showthread.php?165834-LISP从Revit导出更改文字样式的字体
仅供参考(ai_table)函数是由Autodesk编写的lisp例程,包含在“ai utils.lsp”文件中。(通过在命令行上键入(findfile“ai\u utils.slp”)来搜索它)。还有其他有用的实用程序。它们与AutoCAD一起加载。
否则,其中的所有函数都只是内置函数。这只是使用“STYLE”命令而不是Visual LISP方法更改字体的一种更简单的编码方式。注意:如果(findfile)已位于支持路径中,则不必在上使用“romans.shx”。
页:
[1]