乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 64|回复: 6

[编程交流] 文本样式visual lisp例程

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:19:43 | 显示全部楼层 |阅读模式
我有一个lisp例程,可以将字体从一种或多种类型更新为单一类型。
 
这是:
 
  1. (vl-load-com)
  2. (defun c:TXSHX (/ new)
  3. (setq new "C:/Program Files/Autodesk/AutoCAD 2016/Fonts/simplex.shx")
  4. (vlax-map-collection(vla-get-textstyles(vla-get-activedocument(vlax-get-acad-object)))
  5. '(lambda (x / font)
  6. (setq font (strcase (vla-get-fontfile x)))
  7. (if (wcmatch font "simplex.ttf,simplex.shx,simplex._ttf,simplex._shx")
  8. (vla-put-fontfile x new)))
  9. )
  10. (princ)
  11. )

 
我不知道为什么,但它不起作用。我没有出错,也没有任何变化。我最初是从一个论坛帖子上得到这个例程的。我根据需要对其进行了修改,但它在其原始形式下仍具有功能
 
这是原件:
 
  1. (vl-load-com)
  2. (defun c:updateTextstyles (/ new)
  3. (setq new (strcat (getenv "systemroot") "\\Fonts\\Arial.ttf"))
  4. (vlax-map-collection
  5. (vla-get-textstyles
  6. (vla-get-activedocument
  7. (vlax-get-acad-object)))
  8. '(lambda (x / font)
  9. (setq font (strcase (vla-get-fontfile x)))
  10. (if (wcmatch font "ROMANS.SHX,SIMPLEX.SHX,TXT.SHX")
  11. (vla-put-fontfile x new)))
  12. )
  13. (princ)
  14. )

 
我正在使用的图形文件有点奇怪,因为它们是从revit导出的。例如:样式表中的值将字体显示为“simplex_u.ttf”,但用户界面将字体显示为“simplex.shx”。重新选择单纯形。shx修复了样式表。我正在尝试将其自动化,但当我运行例程时,它并没有改变。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:30:25 | 显示全部楼层
请阅读以下内容:
http://www.cadtutor.net/forum/showthread.php?9184-代码发布指南
 
并将匹配模式字符串更改为:
  1. "simplex.ttf,simplex.shx,simplex._ttf,simplex._shx "
至:
  1. "SIMPLEX.TTF,SIMPLEX.SHX,SIMPLEX._TTF,SIMPLEX._SHX"
所有大写字母,无尾随空格。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 17:43:54 | 显示全部楼层
或者,只需为第一个例程添加t符号,如下所示:
 
  1. (setq font (strcase (vla-get-fontfile x) [color="blue"][b]t[/b][/color]))
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:55:18 | 显示全部楼层
他们中约有一半的人通过修缮这个案子获得了成功。我也换了单纯形_shx到simple_2;。shx,因为这是一种类型。由于某种原因,他们中只有一半人改变了。
回复

使用道具 举报

4

主题

305

帖子

225

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
97
发表于 2022-7-5 18:08:01 | 显示全部楼层
 
 
这将有助于您张贴一个示例图纸,供我们测试。否则,几乎不可能确定图形中发生了什么。如果wcmatch测试在某些方面(但不是全部)起作用,那么它几乎肯定与您的wcmatch测试有关。也许为了排除故障,您应该使用(vlax map collection)函数和“vla get fontfile”,并将结果打印到命令行,以查看接下来会发生什么。还要检查替换字体的路径。除非在搜索路径的多个位置有“simplex.shx”,否则您应该能够替换:
 
 
  1. (setq new "C:/Program Files/Autodesk/AutoCAD 2016/Fonts/simplex.shx")

使用:
  1. (setq new (findfile "simplex.shx"))
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:16:54 | 显示全部楼层
好的,我在AUGI论坛上找到了下面的代码。我在文章的最后添加了一个链接。这似乎效果很好。它使用了我在读过的LISP指南中没有看到的函数,与我发现的其他LISP例程不同,它不需要选择活动文档或样式表。我猜最大的变化是wcmatch搜索字符串而不是字体。
 
 
  1. (defun c:allstyle2romansshx nil
  2. (foreach st (ai_table "STYLE" 4)
  3.    (if (wcmatch st "RomanD*")
  4.      (progn
  5.        (command "_.STYLE" st "romans.shx")
  6.        (while (< 0 (getvar 'cmdactive))
  7.          (command "")
  8.        )
  9.      )
  10.    )
  11. )
  12. (princ)
  13. )

 
 
http://forums.augi.com/showthread.php?165834-LISP从Revit导出更改文字样式的字体
回复

使用道具 举报

4

主题

305

帖子

225

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
97
发表于 2022-7-5 18:21:13 | 显示全部楼层
 
 
 
仅供参考(ai_table)函数是由Autodesk编写的lisp例程,包含在“ai utils.lsp”文件中。(通过在命令行上键入(findfile“ai\u utils.slp”)来搜索它)。还有其他有用的实用程序。它们与AutoCAD一起加载。
 
 
否则,其中的所有函数都只是内置函数。这只是使用“STYLE”命令而不是Visual LISP方法更改字体的一种更简单的编码方式。注意:如果(findfile)已位于支持路径中,则不必在上使用“romans.shx”。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 08:27 , Processed in 0.380265 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表