简介:面向AutoCAD字库定制需求的 ShxEditPro 使用说明书,适合需频繁处理shx/shp矢量字库的CAD工程师、广告制作与模具标识设计人员,也适合希望在激光打标、IC贴标等场景快速生成特殊字符的技术人员。文档系统讲解14种一笔画编程指令的调用规则与参数含义,覆盖方向直线、下笔抬笔、比例缩放、坐标点入栈出栈、子型调用、八分圆弧、凸度圆弧及多段凸度圆弧等核心命令,并通过字符A增加直线的示例阐明指令插入与图元选中编辑的方法。针对复杂图形,文中演示了将CorelDRAW或AutoCAD预先绘制的图形经DXF/PLT导入生成字符的流程,同时提示网格点捕捉、plt单位等精度控制要点,最后说明如何导出shp并通过AutoCAD compile命令编译为shx字库。资源为1个docx文档,大小796KB,内容紧凑,适合按需查阅。已有2124人学习下载,可作为掌握Autodesk字库编程与自定义字符集输出的实用性参考。 做AutoCAD的人大概都碰过这样的场面:对方发来一套图纸,你打开一看,多行文字变成一整排问号,或者某个自定义符号彻底消失,只留下一条断线。查到最后,十有八九是SHX字库缺失或者版本不匹配。SHX是AutoCAD里一类特殊的编译后形文件,承担着字形、符号、自定义图例的存储任务,像常见的txt.shx、romans.shx、gbenor.shx、gbcbig.shx都属于这个家族。这篇我想聊的不是怎么装字体,而是怎么用ShxEditPro这类专业字库编辑器,把自己的专业符号做成带编码、可编译、可在AutoCAD里直接调用的SHX字库,顺带把SHP格式的底层逻辑和字库格式互转的方法一起讲透。适合做CAD标准化、专业图例定制,或者正被字体问题折磨的朋友。
1. 为什么专业的CAD图纸越来越需要"自家字库"
1.1 一次图纸大范围缺字的排查经历
前几年我收到一套勘察单位的成果图,打开后所有钻孔编号全变成了"???",就连图框里的单位名称也是乱码。一开始我以为是对方用了我没有的字体,就把图里的文字样式逐个点开,发现样式名用的是ZSDZ,字体文件指向一个zsdiaz.shx,这文件我机器上根本没有。AutoCAD在找不到指定SHX时会用默认字体顶替,而默认字体里没有对应的字符编码,所以全部显示问号。
这类问题在项目协作里非常典型。SHX文件和TTF字体最大的区别是:TTF是系统级的,安装一次全局可见;SHX是AutoCAD应用级的,必须放在AutoCAD的支持文件搜索路径里,而且图纸里记录的是文件名,不是文件内容。对方改了字库内容,你没同步更新,打开就是错的。用自家字库、管好版本分发,不是锦上添花,是刚需。
1.2 SHX不是随便一个TTF能替代的
有朋友会问:现在都用TTF字体,比如仿宋、宋体,为什么还要折腾SHX?
一个重要原因是可靠性和一致性。SHX字库本质是矢量笔画定义,不依赖操作系统字体环境,版本确定之后,在每台机器上的显示结果完全一致。TTF则受Windows字体替换、字重、ClearType渲染等影响,同一张图在不同机器上打开,排版和字形会有细微偏移。
另一个原因是专业符号需求。勘察行业有岩性图例、水位线符号,机械行业有焊接符号、粗糙度符号,电气行业有各种端子标识。这些符号很难在通用字体里找到,但完全可以用SHX的方式做成一个"符号字库",需要时直接通过文字输入调用。AutoCAD的TEXT、MTEXT、DIMSTYLE都能直接使用字库中的字形,比插入图块至少快三倍。
1.3 ShxEditPro这类工具补上的能力
我最早编辑SHX是纯文本写SHP,再进AutoCAD执行COMPILE命令编译,流程繁琐,调整一个方向码要看半天。ShxEditPro这类字库编辑器把流程简化成了三件事:
- 图形化编辑字形,不需要记方向码
- 内置SHP编译器,直接生成SHX文件
- 提供SHP/SHX/DXF/TTF的格式转换能力
对我这种有大量存量符号要整理的人来说,批量转换和照排功能比手工画更值钱。下面的内容我就围绕这三个能力逐步展开。
2. SHP源文件才是SHX的"源代码"
2.1 SHP的组成与编译原理
SHX是SHP文件编译后的二进制产物,SHP是纯文本,本质是一段段数字指令,告诉AutoCAD每一笔该往哪里画、落下还是抬起。文件里有两种定义:文件头定义和字符定义。
文件头定义固定以*0开头,声明这个字体文件的基本信息。字符定义则对应每个字符编码,比如ASCII码65对应字符A,我们就写*65。下面是一段极度简化的示例:
*0,4,fnt 2,0,0,0 *65,5,TRIA 1,042,04A,040,0文件头定义里,*0表示文件头,4表示这个定义占4个字节,fnt是自定义名称。后面2,0,0,0是字体标志和度量参数,实际字库会复杂得多。
字符定义里,*65代表ASCII 65,5代表该定义有5个字节,TRIA是字符名。后面5个字节的含义见下表:
| 字节 | 含义 |
|---|---|
| 1 | 落笔,开始画线 |
| 042 | 长度4,方向2(右上45度) |
| 04A | 长度4,方向A(左下225度) |
| 040 | 长度4,方向0(水平向右) |
| 0 | 定义结束 |
这段字节画出来是一个向右的三角折线。虽然简单,但它把SHX指令的底层逻辑演示清楚了:每个字节的高4位是矢量长度,低4位是方向码,0-15一共16个方向,对应圆周上每22.5度一个方向。方向码速查表如下:
| 方向码 | 角度 | 指向 |
|---|---|---|
| 0 | 0° | 右 |
| 2 | 45° | 右上 |
| 4 | 90° | 上 |
| 6 | 135° | 左上 |
| 8 | 180° | 左 |
| A | 225° | 左下 |
| C | 270° | 下 |
| E | 315° | 右下 |
2.2 特殊码:处理复杂几何的关键
真正的手写字库不可能只用直线段拼,圆弧、曲线、镜像、斜体都要靠特殊码实现。SHP里的特殊码有好几个关键值:
1:落笔画线2:抬笔移动3:用下一个字节的长度和方向画线,支持更精细的长度4、5:用X-Y坐标偏移来画线或移动,适合非标准方向8、9、A、B:圆弧和分弧定义C:整圆定义E:水平/垂直镜像处理标志,字体用到F:斜体变形处理,字体用到
其中E和F是字体级特殊码,一般的几何符号用不到,但在制作普通英文字体和符号字库时作用很大,后面第5章我会专门讲镜像那个坑。
2.3 小字体与大字体:一个常被搞混的概念
AutoCAD的SHX字体分两种:小字体(普通字体)和大字体(BigFont)。小字体处理单字节字符,也就是英文、数字、常用符号,每个字符用一个字节编码。大字体处理双字节字符,比如中文、日文、韩文,用两个字节定位字形。
| 项目 | 小字体 | 大字体 |
|---|---|---|
| 编码宽度 | 1字节 | 2字节 |
| 主要用途 | 西文、符号 | 中文、日文、韩文 |
| 常见文件 | romans.shx | gbcbig.shx |
| 字符容量 | 256个 | 最多6万多个 |
ShxEditPro里做中文字库时,要同时生成大小两个字库文件,并在AutoCAD的STYLE命令里分别指定中文字体和大字体。这套机制看起来有点老,但AutoCAD至今保留着,是图纸跨版本稳定的基石。
3. 用ShxEditPro做一套岩土勘察图例字库
这一节我就以岩土勘察图例为例,走一遍从规划到加载的完整流程。你没有勘察背景也没关系,换成机械符号、电气符号,操作路径一模一样。
3.1 先规划编码表和字体参数,别急着画
编辑字库最容易犯的错是打开编辑器就画,画完才发现编码冲突。正确做法是先做编码规划。
我的习惯是维护一张字符-符号对照表,比如:
| 编码 | 字符 | 符号含义 |
|---|---|---|
| 65 | A | 钻孔 |
| 66 | B | 探井 |
| 67 | C | 水位观测孔 |
| 68 | D | 取样点 |
| 69 | E | 标贯点 |
接下来在ShxEditPro新建工程,几个参数要理解清楚再填:
- 字体名称:建议用纯字母,比如
SurveySym,避免中文名和特殊字符导致AutoCAD读取异常。 - Ascent/Descent(上伸线/下伸线):影响多行文字的行距和基线位置。一般设成1.0和0.2单位,太大显得行距空,太小行与行会打架。
- 字符宽度:可以是固定宽度,也可以每个字符单独设置。符号类建议用固定宽度,这样在文字里排列整齐。
3.2 图形化绘制和实时预览
工程建好后,进入字形编辑界面。ShxEditPro的编辑区类似一个简单CAD画布,工具就是直线、圆弧和移动。画钻孔符号时,我先画一个圆,再画中心十字线,整个过程不接触任何SHP字节。
画完一个重要动作是看预览:关闭网格,用大字号显示,检查符号的视觉重心和基线是否一致。符号类字库最忌讳高度参差不齐,放一行文字里上蹿下跳很难看。我在这一步会把所有符号摆到一起,逐个调垂直位置,直到视觉上统一。
工具内部会把图形实时翻译成SHP定义,你可以切到"源码模式"看到对应的指令字节。这个功能对新手尤其友好:一边画一边看字节变化,慢慢就理解了方向码的运作方式。
3.3 编译成SHX并在AutoCAD里挂载
所有字符画完,点击编译,工具会生成SurveySym.shx。在AutoCAD加载的方式是:
- 把
SurveySym.shx复制到AutoCAD支持文件搜索路径下的Fonts文件夹,或者工具选项里添加搜索路径。 - 命令行输入
STYLE,新建或修改文字样式。 - 在"字体名"下拉框中找到
SurveySym,确认应用。 - 用
TEXT命令输入字符A,图上就会显示钻孔符号。
测试阶段要重点测试几个维度:大写字母、小写字母、数字、特殊字符在不同文字高度下的显示效果。我通常用TEXT写一串ABCDE12345@#$%,然后在模型空间和布局空间各看一次。
3.4 大字体与中文高位区映射
如果要做中文字库,比如一套"勘察备注汉字库",需要在工程里新建大字体文件,并指定双字节编码范围。传统方案是把常用汉字放在高位区,用两个字节分别代表区号和位号。ShxEditPro会自动维护这个映射,你只需要在表格里填汉字和符号的对应关系。
编译后会生成两个文件:小字体(管理西文和符号)和大字体(管理汉字)。AutoCAD的文字样式中,小字体选SurveySym.shx,大字体选SurveyHZ.shx。这样图里既有字符符号,又能正常输入中文备注,两者互不干扰。
4. 字库格式互转:把历史符号资产救回来
这些年我接触的团队里,最想用字库编辑器的人往往是手里有一堆老图例、老符号,却不知道怎么变成规范的SHX字体。这部分讲格式转换,正是冲着存量资产复用去的。
4.1 互转矩阵和适用场景
ShxEditPro的转换基本覆盖了字库相关的常见格式:
| 源格式 | 目标格式 | 典型场景 |
|---|---|---|
| SHX | SHP | 反编译老字库,查看或编辑 |
| SHP | SHX | 手写或修改后编译回字库 |
| SHX | DXF | 把字库字形导出成AutoCAD图元 |
| DXF | SHP/SHX | 把图纸里的符号转成字形 |
| SHX | TTF | 生成系统字体,跨软件使用 |
| TTF | SHX | 提取单线轮廓,做刻字、激光切割 |
这个矩阵的价值在于:不需要重新画一遍。只要来源是矢量数据,转换后至少能作为编辑起点,比手工重绘节省大量时间。
4.2 SHX转TTF的精度取舍
SHX转TTF是我用得最多的功能,但不少人不理解为什么转出来的TTF看起来"不够粗"。这要说到SHX的本质:它是单线笔画字体,每条线只有路径没有宽度。TTF则是轮廓字体,靠闭合轮廓和填充形成字形。
转换工具的处理逻辑通常是给每条笔画指定一个固定宽度值,然后沿路径生成两条边线,闭合后填充。这个"假线宽"大小直接决定字形观感。宽度太小,字看起来偏细;宽度太大,拐角处会变形。
我的建议是:转换时先导出几个代表性编码,分别用0.1、0.15、0.2倍字高测试一遍,对比之后选定统一线宽。另外,TTF的hinting(微调对齐)信息在SHX里不存在,转出来的TTF小字号显示时边缘可能不够锐利,这是格式本身的局限,不是工具的问题。
4.3 最实用的批量迁移场景:DWG图元到SHP/SHX
我最近做一个项目标准化,需要把50多个勘察图例块变成字库。手工画一遍至少一天,但批量转换一小时就完成了。
方法不复杂:在ShxEditPro里导入DXF文件,选中一个符号图元,定义它的基准点和字符编码,加入字库。对于结构复杂的符号,工具会自动生成中心线和轮廓的组合路径;遇到剖面填充这种特别复杂的,我的经验是转成SHP后在编辑器里手动清理一遍不需要的杂线,再编译SHX。
批量转换最大的坑是基准点不统一。每个符号在DWG里的插入点和它作为字形时的基线位置必须对齐,否则在文字里使用时会明显错位。所以转换前先在DWG里把所有符号移动到统一基准,再导入。
5. 编辑SHX字库的几个深坑与排查思路
5.1 字形在镜像、旋转下方向乱掉的根因
AutoCAD里有个系统变量MIRRTEXT,控制文字镜像时是否可读。设为0时文字镜像后仍保持正读,这是通过SHX字体的特殊码E(14)实现的。如果你的字库没有正确处理这个标志,在图纸里做对称符号、镜像标注时,字符就会上下颠倒或左右反跳。
用ShxEditPro编辑时,确保字形属性里的"允许镜像处理"勾上,工具会自动在字形定义中加入相应的特殊码。如果是从老字库反编译出来的,要重点检查定义里有没有字节0E或0F。我在一个水路符号字库上踩过这个坑:符号在普通文字里一切正常,一用MIRROR命令反了向,整个符号直接翻成了镜像体,排查半小时才发现是缺少镜像标志。
5.2 中文显示问号:编码错位比缺字更隐蔽
中文字库显示成问号,不一定是缺字符。最常见的原因是文字样式里没指定大字体,AutoCAD用小字体去解析双字节编码,必然出问号。其次是字形编码表冲突,两个汉字映射到同一个区位,后写入的覆盖了先写入的。
排查建议按顺序做:先确认文字样式有没有配大字体;再确认文件编码和图纸代码页是否一致;最后在ShxEditPro的编码映射表里查目标汉字是否存在,是否被其他字符占用。前两步能解决九成问题。
5.3 改了SHX不生效:文件路径和缓存问题
这是我自己都犯过好几回的低级错误。在ShxEditPro里编译完新字库,回到AutoCAD一测试,发现还是旧字形。原因有两个:一是AutoCAD进程启动时已经加载了旧字库,工作期间不会自动重新读取磁盘文件;二是有两个同名SHX分别放在不同搜索路径里,AutoCAD只会读取优先级高的那个,你改的是另外那个。
我的标准操作是:修改后先关闭AutoCAD再复制新文件,然后在命令行执行REINIT重新初始化字体文件,再打开测试。如果还不生效,用OPTIONS打开"文件"选项卡,按照搜索路径顺序逐个检查Fonts目录,确认当前读取的是哪一个。
5.4 对标第三方CAD平台的兼容性验证
国内很多设计院用中望CAD、浩辰CAD这类基于AutoCAD内核的国产平台。大部分SHX字库在这类平台能兼容,但对某些特殊码支持程度不一,特别是圆弧和镜像处理指令。所以字库做完,别只在自己电脑上验证,至少要在一台装有国产CAD的机器上跑一遍。
我通常在测试用例里列出三类场景:普通文字输入、标注样式引用、DWG图纸整体缩放。第三类最容易暴露问题——某些平台对SHX字体的缩放算法有差异,同一条折线在AutoCAD里正常,在第三方平台里会出现微小的比例偏移。发现问题就回到编辑器微调字形尺寸,直到各个平台显示一致。
做字库这件事,慢功夫都在前期的编码规划和后期的兼容性验证上。编一个符号很快,但做一套团队里大家敢用的字库,需要把这些细节都捋清楚。希望这篇经验能帮你少走一半弯路。
本文还有配套的精品资源,点击获取