;;;;在AutoCAD的早期版本中,仅能通过定义形文件的方式来使用字体。现在AutoCAD可调用Windows系统字库,支持TrueType字体以及PostScript字体,但AutoCAD仍提供了许多使用形定义的字体文件供用户使用,这些字体文件保存在AutoCAD主文件夹的“FONT”子文件夹中。如果用户仍不满足于这些字体,而希望使用具有独特风格的字体,那么我们可以用与创建形文件类似的方法来创建新的字体文件。
33.2.2 字体文件的定义
;;;;1. 文字字体说明
;;;;如果一个形定义文件被用作字体文件,则文件中的第一个条目必须用于描述字体本身,即文字字体的说明。文字字体说明由头部说明和形状说明两部分组成,用以提供字体本身的信息。具体格式如下:
;;;;*0,Defbytes,font name
;;;;Above,Below,Modes,0
;;;;其中:
;;;;(1) Defbytes:形状说明的数据字节数,包括终止符0。
;;;;(2) font name:字体名称。
;;;;(3) Above:高位距离,定义大写字母在基线上方的矢量长度。
;;;;(4) Below:低位距离,定义小写字母在基线下方的距离。
;;;;(5) Nodes:定义字体方向,取0表示文字为水平方向,取2表示文字为(水平或垂直)两个方向。
;;;;(6) 0:终止标识符。
;;;;2. 字符形状定义
;;;;字符形状定义与形的定义几乎完全相同,具体差别在于:
;;;;(1) 字符形状编号为该字母的ASCII码而不能是任意的编号,因为AutoCAD是按字符的ASCII在绘制字符的,而不是它的名称。
;;;;(2) 虽然AutoCAD并不根据字符形状的名称来绘制字符,但仍可在编辑字体文件时应用字符形状的名称。一般用小写字母来指定形状名称,小写的形状名称是不会保存在内存中的。
;;;;(3) ASCII码中1~31为控制字符,其中只有10用于AutoCAD字体中,用来定义换行(lf)。即将绘图位置下移一行,而不绘制图形。例如:
;;;;*10,5,lf
;;;;2,8,(0,-10),0
33.2.3 字体文件的创建与使用
;;;;同形定义文件一样,我们可以使用文本编辑器来创建字体定义文件。
;;;;实例3 创建“USERFONT”字体
;;;;(1) 使用Windows附件中的“记事本”程序创建一个新的文本文件。
;;;;(2) 在该文件中添加如下内容,如图33-6所示。
;;;userfont.shp - user defined fonts
;;;;*0,4,userfont
;;;;21,7,2,0
;;;;*69,14,lte
;;;;2,010,1,044,020,2,02A,1,010,2,02b,1,020,0
;;;;*72,13,lth
;;;;2,010,1,044,2,02C,1,020,2,024,1,04C,0
;;;;*76,9,ltl
;;;;2,010,1,044,2,04C,1,020,0
;;;;*79,8,lto
;;;;2,010,1,020,044,028,04C,0
;;;;将该文件保存在AutoCAD主文件夹的“FONTS”子文件夹中,并命名为“userfont.shp”。
;;;;(3) 在AutoCAD中对该文件进行编译,并载入到当前的字体样式中。
;;;;(4) 在AutoCAD中使用“Text”或“MText”命令绘制文字“HELLO”,结果如图33-7所示。
33.2.4 大字体说明
;;;;某些语言(如汉语)的字体包括上千种非ASCII字符。为绘制包含这些文字的图形,AutoCAD支持称为大字体文件的特殊格式的形定义文件。由于大字体文件包含成百上千种字符的字体,因此其处理方式较为复杂。除了使用更加复杂的文件搜索技术之外,AutoCAD需要某种方法来用双字节代码表示字符和单字节代码。
;;;;大字体形定义文件的第一行必须为:
;;;;*BIGFONT nchars,nranges,b1,e1,b2,e2,...
;;;;其中各项含义如下:
;;;;(1) nchars:指出此集合中近似的字符定义数量。如果此数值过大,且误差超过百分之十,则速度或文件大小就会受到影响。
;;;;(2) nranges:指出有多少个连续区间中的数字用作换码代码;换码代码是双字节代码开始区域的特殊字符代码。
;;;;(3) b1,e1,b2,e2,…:定义了每个区间的开始和结束代码。
;;;;在*BIGFONT行后是字体定义,大字体定义与普通 AutoCAD文字字体相似,区别在于其字符代码(形编号)最大可以为65535之外。
;;;;在一些绘图规范中,许多特殊符号可以出现在文字字符串中。AutoCAD标准文字字体可扩展包含特殊字符。然而,扩展后的标准文字字体有许多限制,如:
;;;;(1) 每个字体文件的形数目为255。
;;;;(2) 标准字符集使用约一半可用的形编号。只有代码1到9,11到31,130到255可用。
;;;;(3) 多文字字体需要在每种字体中包含符号定义的副本。
;;;;(4) 特殊符号需要用户输入%%nnn,此处的nnn是符号的形编号。
;;;;而使用大字体机制可以避免这些问题。用户可以选择一个或多个不常使用的字符作为换码代码,例如使用“|R”来调用希腊字母“Γ”。
;;;;当需要在AutoCAD系统中使用大字体时,则要在“Text Style(文字样式)”对话框中请选择“Use Big Font(使用大字体)”选项,并在“Big Font(大字体)”下拉列表中选择所需的大字体文件,如图33-8所示。
33.2.5 Unicode字体说明
;;;;标准的AutoCAD字体与主机操作系统使用的字符映射一致。这是因为字符直接按它们从键盘获取的格式保存在数据库中。用于生成字体的是相同的字符代码。当使用存在多种字符编码标准的重音字符(八位字符)时,这就成为一个严重问题。由于字符映射的限制,AutoCAD为其使用的多种代码页提供了一组Unicode字体。这些字体本质上一样,根据定义的代码页的不同,而拥有位于不同位置的字符。如果所使用的字体编码与图形中的文字不匹配,可能绘制出错误的字符。
;;;;使用Unicode字体时,文字字符串在被绘制前都转换为Unicode,因此不必再为其他语言或平台提供附加字体。由于Unicode 提供了大字符集,所以一种Unicode字体就能支持所有语言和平台。此功能对用户是透明的,因为如果必要(由代码页的不同决定),图形在加载时被转换为AutoCAD的系统代码页。图形总是以AutoCAD系统代码页的形式保存。
;;;;但是需要说明的是,Unicode不能为所有亚洲语言提供完整的支持,因此大字体仍然在某些或全部亚洲版本中使用。
;;;;Unicode形定义文件在格式和语法上与普通AutoCAD形定义文件一样,主要的区别为:1. 在字体开始的语法中不同,如下所示。
;;;;*UNIFONT,6,font-name
;;;;above,below,modes,encoding,type,0
;;;;其中font-name、above、below和modes参数与常规字体中的参数一样。余下的两个参数定义如下:
;;;;(1) encoding:字体编码。使用下列整数值:
0 |
Unicode |
1 |
紧缩的多字节 |
2 |
形文件 |
(2) type:字体内嵌信息。指定字体是否经过授权。授权字体不能修改和交换。(按位编码的值可以相加。)
0 |
可以内嵌的字体 |
1 |
不能内嵌的字体 |
2 |
内嵌时为只读 |
2. 对代码7子型引用的处理不同。如果形描述包含一个代码7子形引用,代码7后的数据将被解释为双字节值。这将影响形描述标题中的数据字节 (defbytes) 总数。例如,下列形描述是在romans.shp 文件中包含的:
;;;;*00080,4,keuroRef
;;;;7,020AC,0
;;;;标题中的第二个字段表示形描述中的字节总数。如果用户不将其和Unicode字体描述一起使用,可以使用3字节而不使用4字节,但这将导致在编译SHP文件时发生错误。尽管用户引用的形编号不在双字节范围内(小于255),但编译器仍对该值使用双字节,因此用户必须在标题中计算。
;;;;3. 形的编号不同。AutoCAD提供的Unifont形定义使用十六进制形编号,而不使用十进制编号。尽管这并不是必须的,但它使得用U+控制字符值交叉引用形编号更加方便。
小 结
;;;;本章主要介绍形的概念和定义,并通过实例来讲述了形的创建和使用。
;;;;利用形技术,用户还可以定义文字字体,本章通过一个简单的实例说明了如何定义和使用文字字体。此外,还简要介绍了大字体和Unicode字体。