明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7675|回复: 16

比开图自动替换字体更厉害的终极解决方案(2022全球首发)

[复制链接]
发表于 2023-3-23 23:34:05 | 显示全部楼层 |阅读模式
本帖最后由 xugaoming23 于 2023-3-23 23:56 编辑

2022年全球首发的真正意义上的大字体自动映射,如同西文的fontalt映射!

我看都2023年了,还没有人发布类似方案,在此提点一二!
由于我的原理已变成商用的万能字体插件,所以在此仅给出方案,不给代码,有了方案,一定难不到聪明的你。


万能字体插件演示:https://www.douyin.com/video/7098569390710443302

一、先说下背景:
我们都知道fontAlt可以设置西文的映射字体,即当这个西文字体不存在时,会映射为fontAlt设置的字体,而不会弹窗。
但中文大字体却不幸,只要这个字体不存在,就会弹窗,这个就是老美对我们的不公。
而我就是突破这个,做到中文大字体也可以自动映射,从而不会弹窗。

二、再说下发现原理:
当图纸第一次打开后,手动替换不存在的大字体后,不关闭CAD再打开这个图纸时,就不会出现替换框,原因就是CAD在内存中暂存了一份映射表 ,例如当手动a.shx映射为gbcbig.shx,在不关闭CAD主程序的前提下,随后打开的图纸,不会再次在替换框中出现a.shx。


通过这个原理,我找到了CAD内置函数,直接添加大字体映射即可。(利用c#可以调用这个函数,注意不是托管函数,属于c语言的,CAD没有公开这个函数,全球互联网都是搜不到这个函数的,只能自己凭感觉去一个dll一个dll发现)


利用以上原理,不仅仅可以添加大字体映射,还能添加真字体映射,也能添加西文字体映射。
在实验过程中,我还把西文映射为真字体也是可以的,2010及以下的版本是没有问题,感觉特别好玩,但是高版本添加映射后,刷新不出来,要双击或到自动保存时间到了后才能刷新效果,一直也没找到如何解决这个问题,当然最后通过各种实验归纳了通用的方案。


三、方案思路:


利用c#编写程序,设置自动加载,初始化时执行文档读入事件
通过图纸读入完成后的事件,自动执行映射函数,
映射函数,包括遍历textstyle 文字样式,遍历多行文字,读取里面的所有大字体、真字体
只要发现本地的大字体和真字体不存在时,就自动添加映射,我一般设置的是大字体映射为hztxt.shx,真字体映射为宋体(关于列出本地字体表有托管函数,cad也没有公开,不过一搜就能收到)
最后刷新一下图纸regen即可。

针对西文,我自己研发了万能字体,比快速看图和看图王兼容更多的钢筋字符,利用fontalt设置系统变量即可。

有三个注意点:
1.  07以上的图纸可以刷新,但07以下版的图纸是刷新不了的,要通过重载图纸,即不关闭CAD,而重新打开图纸,之所以刷新不了,是因为07版以下的图纸字符编码不一样,07以上是unicode编码,中英文占宽一样,07以下占宽不一样,打开图纸后,编码是跟 这字体解析发生变化,无法通过刷新来回归字符编码,这也是很多永久性乱码图纸产生的原因,(有的人拿着07以下版本的图纸,打开时没有手动替换或者映射到正确字体,结果就显示乱码,而当保存后就出现了永久乱码)
所以在此呼吁,大家不要保存07以下版本图纸,至少07版本
2.特别要注意内存中的映射表状况,不要产生映射循环,如a映射b,b映射c,怪异的现象自己做实验哦,还有一种情况,同一个图纸,可能会出现一个字体,在不同的样式中,一会代表西文,一会代表中文,这个是要进行修正的,不然映射就循环得一塌糊涂导致文字直接不显示。
3.程序是后于字体替换窗口的,因此需要关闭替换窗口,2010以上的CAD可以通过添加忽略字体窗口来解决,这个同样是程序编程处理,我看论坛有人采用这个技术,效果比较好,2010以下版本CAD版本,需要先开个CAD,再打开图纸,这样程序会先于替换窗口执行,再利用替换字体窗口的特征关闭窗口,效果不是很好,会有闪窗的影子。

总结:整过解决方案不会修改图纸字体,纯内部映射,c#的速度也很快,效果是很完美的,唯一遗憾的是2010以下没有忽略窗口的,会有闪影.




点评

来,这里是免费的,阿甘出品: http://bbs.mjtd.com/thread-183072-1-1.html  发表于 2023-3-24 09:53
2022年初代产品演示,有一些好玩的:https://www.douyin.com/video/7074640423620316419  发表于 2023-3-23 23:51
发表于 2023-3-24 11:08:29 | 显示全部楼层
既然大家这么活跃,直接放源码:
【统一所有字体为宋体】
顺便也解决了乱码问题。保存图纸后也不再弹出提示换字体。

其实弹不弹提示,不是最烦的。
最烦的是乱码问号。各种设计院独立门户,滥用字体秀智商............
统一字体,避免张三李四的,字体一大堆,看起来极为不爽



  1. (defun c:HT (/ OBJNAME ATTS);原作者:liunian0524
  2. (vl-load-com)
  3.   (setq ThisDrawing(vla-get-activedocument (vlax-get-acad-object)))
  4.   (Setq TextStyles(vla-get-TextStyles ThisDrawing))
  5.   (Setq TextStyle(vla-add TextStyles "仿宋"))
  6.   (vla-SetFont TextStyle "仿宋" :vlax-false :vlax-false 1 0)
  7.   (vlax-for blkobj (vla-get-blocks
  8.                      (vla-get-ActiveDocument (vlax-get-acad-object))
  9.                      )
  10.     (vlax-for obj blkobj
  11.       (if (or (= "AcDbMText" (setq objname (vla-get-objectname obj)))
  12.               (= "AcDbText" objname)
  13.               (= "AcDbAttribute" objname)
  14.               (= "AcDbAttributeDefinition" objname)
  15.               )
  16.         (VL-CATCH-ALL-APPLY 'vla-put-stylename (list obj "仿宋"))
  17.         )
  18.       (if (and
  19.             (or (= "AcDbMInsertBlock" objname)
  20.               (= "AcDbBlockReference" objname)
  21.               )
  22.             (setq atts (vlax-invoke obj 'GetAttributes))
  23.             )
  24.         (foreach a atts (VL-CATCH-ALL-APPLY 'vla-put-stylename (list a "仿宋")))
  25.         )
  26.       )
  27.     )
  28.   (setvar 'textstyle "仿宋")
  29.   (command "purge" "st" "*" "n")
  30.   (princ)
  31.   )


回复 支持 2 反对 0

使用道具 举报

发表于 2023-5-13 16:13:39 | 显示全部楼层
lengxiaxi 发表于 2023-3-24 11:08
既然大家这么活跃,直接放源码:
【统一所有字体为宋体】
顺便也解决了乱码问题。保存图纸后也不再弹出提 ...

这个是直接替换,还是只是替换显示?有的只是替换显示,换到其他电脑还是缺少字体
 楼主| 发表于 2023-3-23 23:52:35 | 显示全部楼层
2022年初代产品演示,有一些好玩的:https://www.douyin.com/video/7074640423620316419
发表于 2023-3-24 07:25:49 | 显示全部楼层
明经上只做PPT不提供产品的都是扯淡
发表于 2023-3-24 09:11:23 | 显示全部楼层
本帖最后由 lxl217114 于 2023-3-24 09:13 编辑

来明经打广告,给站长交广告费了么?
没交的话这里@mccad

发表于 2023-3-24 09:31:24 | 显示全部楼层
这个问题,很容易解决。

钢筋符号?天正,理正??都是弟弟

只要不是pdf转回来的乱码,统统搞定!

授人以鱼不如授人以渔
不用花大价钱,一碗泡面钱,就问你良不良心?

需要的@我。
发表于 2023-3-24 09:58:43 | 显示全部楼层
来,这里是免费的,阿甘出品: http://bbs.mjtd.com/thread-183072-1-1.html
发表于 2023-3-24 11:48:23 | 显示全部楼层
lengxiaxi 发表于 2023-3-24 11:08
既然大家这么活跃,直接放源码:
【统一所有字体为宋体】
顺便也解决了乱码问题。保存图纸后也不再弹出提 ...

感谢分享,不支持shx字体吗?
发表于 2023-3-24 12:50:33 | 显示全部楼层
刚开始 发表于 2023-3-24 11:48
感谢分享,不支持shx字体吗?

支持修改成自己钟意的shx字体,阿甘出品: http://bbs.mjtd.com/thread-183072-1-1.html
发表于 2023-3-24 14:01:20 | 显示全部楼层
货物呢?咋看不到啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-1-7 11:24 , Processed in 0.174701 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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